Quick and dirty

2010年09月07日 09:16

好久没扯淡了。扯两句。

前几天在猛禽的推荐下,看了看web.py这个微型web框架。并用了大半天的时间写了一个简单的小应用。

还不错。

由此想到了一些不相干的问题。

首先想到的当然是我们的一个私有项目。这个项目折腾了好几年,最终勉强上线。但是大家都已经被折腾得没了激情。上线在我看来,也是象征意义大于实际意义了。

在这个项目的开发过程中,我解决了很多问题,收获算是不小。但是现在想想,解决的问题中,真正属于业务处理的有多少呢?很少很少。大部分问题都集中在框架层别。比如如何实现优雅的用户认证机制,等等。

我们的项目功能算不上复杂,也就是一个blog的水平。为什么这么简单的东西会拖上如此之久呢?原因很多,大多不足与外人道。但是我也认为有一个比较重要的原因,就是产品迟迟处于开发期,得不到发布。

记得曾经看过一本书,《梦断代码》,里面一帮比我们牛的多的牛人,拥有比我们好的多的环境,资金,氛围,合力开发一个项目,仍然失败了。于是我们看到了一本相当优秀的总结书(笑)。那个产品也有一个大问题,就是优秀的想法非常多,但是都无法进入最终产品——因为最终产品迟迟得不到发布。

每一个有点理想和追求的程序员都会有一个梦想,希望自己的代码能简洁优雅,希望自己的程序架构清晰流畅,能经典到流芳百世。

但是再经典的代码得不到实践的检验,也是白搭。你永远也不会知道用户会以怎样BT的方法使用你的程序,也永远不会知道你的代码究竟有多抗压,甚至也许有很多隐藏至深的bug,不在特殊的应用环境中也不会暴露。

更别提你的程序也许根本不符合用户的需要,或者用户会有更多要求……

另外,很重要的一点是,能给程序员带来最终成就感的,我认为并不是代码本身,而是代码运行的结果。每个人都希望自己的作品广为人知,而不仅仅是孤芳自赏。

所以,尽早的把想法实现,非常重要。

像web.py这样的小框架,就可以让你用quick and dirty的手法尽快的实现一个小东西。当然它欠缺的东西很多,但是都可以用quick and dirty的方式人肉实现。

有了成品再进行改进,就会有目的的多了。

但是quick and dirty并不是解决问题的金钥匙。就像无数软件工程指南中指出的那样,dirty不断累积,最后就会造成整个系统的崩溃和无法维护。

所以,尽早拿出成品,这只是一个开始。真正的关键在于你是不是有恒心有毅力去持续维护和改进它

并且保持整体结构不会变得更加糟糕。

有必要的时候,推翻重写。

这才是真正的问题。

gphoto2是个好东东

2010年09月04日 21:21

继续尝试简明扼要的风格。

今天拿出久违的单反拍了一堆照片,等到晚上准备导电脑时发现杯具了。

我那只恐龙化石级的CF卡读卡器被两个儿子玩得不成器形了都,两排针脚完全扭曲成了麻花。尝试拨乱反正未果。

于是尝试把USB插到相机上。但是很显然相机没有被挂载为U盘。用lsusb发现设备被正确识别成了佳能350D,心中略安。

网上一顿狂找,发现一个gphoto2的工具可以直接支持相机操作,遂安装之。

结果发现……很杯具。不能用。

正在决定放弃之时又看到一篇资料说gphoto2仅支持相机的PTP模式。虾米鬼PTP模式?不过想想应该在设置里,去相机菜单里找了一下,果然有一个数据传输设置,可以设置成“打印/PTP”,设置之后,重新尝试……。OK了。

简单记录一下操作步骤:

设置相机的数据传输设置模式为PTP

用USB连接到电脑

打开相机

在电脑(Linux操作系统)上执行 gphoto2 --auto-detect,如果连接正确会看到相机被列出。

然后执行 gphoto2 -L 查找相机中的照片。注意一下照片前面有序号,下面会用到。

最后执行 gphoto2 -p <序号范围> 导出需要的照片。比如我要导出相机中全部的照片,在上一步中发现最后一张是 #176,则执行命令 gphoto2 -p 1-176,这个命令会把指定的照片导入到电脑的当前目录。

然后……该怎么办就怎么办吧。

不过我觉得我还是要去买只新的读卡器,这种导法麻烦不说,速度也慢了很多。

杯具的产生及解决

2010年09月01日 14:20

觉得以前遇到问题,总会洋洋洒洒写上一堆。我写得累你也看得累。所以这次我尽量简明扼要。

背景:

我的系统是用wubi安装的Ubuntu 10.04,Windows和Ubuntu双系统。

问题的产生:

看到一个grub美化的帖子,一时手痒,安装了,使用了,并且没有注意到它的错误提示。安装完之后启动,发现不是平时看到的Windows NTLDR,而是grub引导界面,并且是出错直接进入了rescue模式。

杯具了……

问题的分析:

因为使用wubi安装,Linux分区实际上被安装在/host/ubuntu/disks/root.disk,它所在的分区会在启动时由wubi引导程序挂载成/host,grub引导程序实际是安装在这个host(/host/ubuntu/disks/boot)上,而非mbr。因此在wubi引导之前,ubuntu的分区实际并不存在,如果将grub直接装到mbr,就无法引导ubuntu了。

另外一方面,可能是因为虚拟硬盘的存在,自动安装的mbr并没有正确识别出windows的引导程序,于是装好的grub也不能正确引导启动windows。

两者都不行,于是整个就杯具了。

问题的解决:

其实我们的目标就是要修复mbr,恢复成windows的那个版本。

而目前我的手头没有windows启动盘或修复盘。只有一张Ubuntu 10.04的安装盘。

杯具中的杯具。

还好Ubuntu 10.04可以当作LiveCD来用。

进入liveCD(试用)模式,然后配好网络。然后,上网找资料。

(此处省略过程1万字……)

经过几次失败尝试之后,找到了一个很容易的解决方法:

sudo apt-get install lilo (安装lilo,好古老的东东)

忽略一切错误提示

sudo lilo -M /dev/sda mbr

重启。

搞定。

-----------------------------

我真是一个善于修电脑的……好人呀。

各种求……我要变坏人……

Design downloaded from free website templates.