为四川人民祈祷! www.onefoundation.cn
logo of kjam.org

The Unarchiver

今天终于把机器里的 UnRarX 扔进了回收站.

以往对于rar, 7z这些文件, mac上一直没有很好的软件支持. 今天看到一个开源的 The Unarchiver, 向大家推荐.
软件界面风格和 OS X 内置的解压程序类似, 功能有不少提升, 界面也很好看.

当然, 使用中也遇到问题, 比如不支持大于4G的分卷文件解压, zip 和 tar 都是如此.
不过由于源代码开放, 所以这些问题一定会很快被作者或者其他代码贡献者修正. 我已经给作者提交了这个bug.

最后, 令人惊奇的是, 对于在不同操作系统直接文件解压导致的文件名乱码问题, The Unarchiver 有着及其到位的支持, 喜欢的朋友们一定要试一试.
comments: 0  
by kernel1983

GTUG Shanghai Launch

Google Technology User Group 的第一次线下活动昨天在上海成功举行, 很荣幸作为组织者之一参与了这次活动.

由于场地的限制, 我们只给出了100个左右的名额, 实际到场的人数几乎也达到了这个数字.
另外还有不少朋友特地从杭州赶过来. 这让我们感受到了大家对于这次活动的热情.

会议主要就Google的技术产品线, OpenWeb, Google App Engine产品以及Google高校活动方面做了四个演讲,
其中我和Google的工程师龚理一起给大家介绍了 GAE 部分的一些情况.

在这次Launch Party之后, 我们将根据各种主题策划一系列 GTUG 活动, 一切泛技术话题都可以成为我们活动的主题.

照片晚些时候会放上来.
comments: 0  
by kernel1983

Shanghai GTUG


Google Technology User Group 上海 开始营业了, 感谢谷歌官方的大力支持.
通过下面的方式订阅或者浏览我们的邮件列表.

Google Groups
Subscribe to Shanghai GTUG
Email:
Visit this group

GAE Shanghai 在过去一年的时间里对 Google App Engine 起到了良好的推广作用, 相信 Shanghai GTUG 将会在更广泛里领域里做得更好.
comments: 1  
by kernel1983

About Intrrupt

自问自答
1. 什么是中断
这个问题我在1996年的时候就问自己了, 实际上到现在仍没有完全搞清楚.
先看看下面的问题

2. 什么是BIOS中断
看看维基百科再说 http://en.wikipedia.org/wiki/BIOS_interrupt_call

3. 在boot.s里面调用中断, 和在linux汇编下调用中断有什么区别
这个问题最搞人, 既然一开机没有加载操作系统的时候就可以调用中断, 那么在linux的用户模式下调用中断算哪门子事?!


OK, BIOS中断是ROM里面的一段一段机器代码, 你别想修改他们, ROM不是RAM(当然除了你刷BIOS)
当计算机加电的时候, 你除了可以用寄存器做算术以外, 也要读读磁盘, 谢谢屏幕吧! 这些写在BIOS里面的程序就是给你用的.

你不能修改BIOS中的中断服务程序, 但是你可以修改中断向量表
Linux内核就是通过修改中断向量表来支持硬件的

IRQ中断请求线, 可以请求硬中断, 一共有15条(我不知道现在的CPU有几条), 你的键盘, 鼠标, 磁盘或者pci设备都回通过这些IRQ电一下CPU, 让CPU调用相应的中断服务程序处理硬件上的数据
软中断, 比如cpu指令int可以调用, 区别是软件发出的(利用这个原理是不是也可以做什么虚拟光驱什么的, 应为软件也可以触发中断, 外带写个driver就行了)

中断是一种机制, linux除了修改中断向量表用自己的代码响应硬件以外, 自己也占用了0x80中断, 方便asm调用linux的system call
这就是说, 你可以调用内核的C函数来system call, 也可以写汇编来调用system call
我的感觉, 汇编写的肯定别想跨平台了... C写的可以.

但是在linux下面写汇编, 你不可能调用所有的中断, 有些只能硬件触发的中断号是不给你调用的, 这就是权限.
当然某些硬中断内核和用户都可以调用.

可以下载 linux 0.01 的内核, 看看 kernel/traps.c
一些想了很久的问题, 今天一吐为快!
comments: 0  
by kernel1983

eurasia and coroutines

上周末的CPyUG上海python聚会, 沈游侠又一次show了他的eurasia框架. 之后javaeye的robbin写博讨论, 然后被nicholasdsj在twitter上发问... 看起来超级热闹.

对于eurasia是不是有那么高的性能, 考虑到沈游侠在娱乐界的地位, 我也不敢随便评价. 总之希望明天会更好, 这也是我们写程序的每个人的美好愿景.

更大的收获还在于对问题的思考, 进程, 线程和协程, 本来就是完全不同的概念, 如今被混在了一起.

进程, 线程是操作系统的概念, 一个多任务操作系统必然有多进程. 线程是可选的, 好处是不同线程可以在进程内共享内存. 教科书都是这么介绍的, 只要操作系统不是那么老掉牙(DOS), 进程们可以同时运行啦.
但是不能忽略的事实是, 单核CPU在同一时间内只能执行一个指令, 那为什么说多任务呢? 仔细一想, 什么进程和线程只不过是CPU按照时间分配而已, 都是些内核玩的把戏.
那么, 按照时间分配是否适合服务器程序呢? 数据在到达网卡之前, 疯狂进程和线程切换只能是两个字: 白干. 不过, 想去掉进程这种玩意, 其他的服务你跑啦? mysql不用啦?
老老实实放弃线程, 或者换一种说法, 放弃系统提供的按照时间切换的线程, 实现自己线程.

OK, 就此打住, 我们再来看看协程

协程的定义可以查看高纳德的 The Art of Computer Programming 或者维基百科, 与协程相对的定义是子例程(应该就是子程序, 好经典的词汇, 让我们回到函数之前的年代)
(这里强调, 协程只是相对于子程序的一种编程概念, 但是到了stackless python中, 却变成了一种替代线程的产品了.)

说白了协程可以自己控制子程序(或者更加现代的说法: 函数)间的切换, 而不像 POSIX pthread 那样按照时间切换. 话说因为GIL的关系, Python的线程确实不敢恭维.
这样说来, 采用stackless python的eurasia的确可以省掉不少CPU资源, 单线程且没有加锁需求.
思路很对.

还有什么可以突破的?
poll和intrrupt模式, 用中文讲就是轮询和中断.
socket的一个相当通用的编程模式就是poll, 就是轮询, 显然不是什么高效的模式. 采用中断模式来驱动协程之间的切换一定会有助于性能的提高. epoll或者IOCP, 应该是已经被验证了的, 有效提高服务器效率的方式.

eurasia如果放在stackless+twisted上, 一定会增色不少.
comments: 2  
by kernel1983
1234567...27