记录备忘
sudo apt-get install python-mutagen find . -iname "*.mp3" -execdir mid3iconv -e GBK {} \;
记录备忘
sudo apt-get install python-mutagen find . -iname "*.mp3" -execdir mid3iconv -e GBK {} \;
emacs 自带的 ctags 不支持 ruby,安装 exuberant-ctags 提供 ruby 语言支持。
aptitude install exuberant-ctags
生成 TAGS
ctags -e -R ~/www/mephisto/
使用 tags 代码导航 copy 自 exuberant-ctags manpage:
HOW TO USE WITH GNU EMACS Emacs will, by default, expect a tag file by the name "TAGS" in the current directory. Once the tag file is built, the following commands exercise the tag indexing feature: M-x visit-tags-tableFILE Select the tag file, "FILE", to use. M-. [TAG] Find the first definition of TAG. The default tag is the identifier under the cursor. M-* Pop back to where you previously invoked "M-.". C-u M-. Find the next definition for the last tag. For more commands, see the Tags topic in the Emacs info document.
works almost great!
sugarcrm 中的姓和名是分开的,对于中文来说,只需要一个字段即可,我们这里只使用了 last_name,first_name 一律留空,便于搜索。 sugarcrm leads 的“重复记录发现”功能默认匹配 first_name 和 last_name 字段,需要将 first_name 关闭。 打开 $PATH/include/SugarObjects/templates/person/vardefs.php,注释掉 first_name 的 merge_filter 键:
'first_name' => array ( 'name' => 'first_name', 'vname' => 'LBL_FIRST_NAME', 'type' => 'varchar', 'len' => '100', 'unified_search' => true, 'comment' => 'First name of the contact', /** start customization */ //'merge_filter' => 'selected', /** end */ ),
rcodetools is a collection of Ruby code manipulation tools for automagic Test::Unit(RSpec) assertion generation, code annotation, 100% accurate code completion, code & doc browsing, obtaining precise method info, meta-prog. aware, etc.
rcodetools will work better if you use it along with FastRI, an alternative to the standard 'ri' documentation browser which features intelligent searching, better RubyGems integration, vastly improved performance, remote queries via DRb... You can find it at http://eigenclass.org/hiki.rb?fastri and it is also available in RubyGems format: gem install fastri Read README.emacs and README.vim for information on how to integrate rcodetools in your editor.
sudo gem install rcodetools gem install fastri ln -s $PATH/rcodetools.el ~/emacs.d/libs添加设定:
(require 'rcodetools)
参考:
最近准备用 rails 做新的产品,没有熟悉的 ruby 开发环境,索性这次狠下心来,用 emacs。
Ubuntu gusty 下安装 emacs
sudo aptitude install emacs
安装 ruby mode
sudo aptitude install ruby-elisp
安装 emacs-rails
mkdir ~/.emacs.d/ cd ~/.emacs.d/ svn co svn://rubyforge.org/var/svn/emacs-rails/trunk rails
下载需要的库文件
cd ~/.emacs.d/ mkdir libs cd libs wget http://www.kazmier.com/computer/snippet.el wget -O find-recursive.el http://www.webweavertech.com/ovidiu/emacs/find-recursive.txtsnapshot设定代码到 ~/.emacs
; rails mode (setq load-path (cons "~/.emacs.d/rails" load-path)) (setq load-path (cons "~/.emacs.d/libs" load-path)) (require 'rails) (require 'find-recursive) (require 'snippet)
几个有用的 mode
sudo aptitude install ecb sudo aptitude install emacs-goodies-el
设定 emacs 颜色方案 ubuntu 的 emacs-goodies-el 包已经提供了 60 多种颜色方案,不过都不是很能让我满意,-__- 这里用了 hober2 的颜色方案。
cd ~/.emacs.d/ mkdir color-scheme cd color-scheme wget http://edward.oconnor.cx/elisp/color-theme-hober2.el增加设定代码到 ~/.emacs
; theme (setq load-path (cons "~/.emacs.d/color-themes" load-path)) (require 'color-theme-hober2) (color-theme-hober2)
OK, rails on emacs 环境已经完成,进入 rails project 目录,打开一个文件试试,rails mode 已经默认加载了。唯一不还不满意的是字体,看了一把 emacs 文档 Defining fontset 节,发现 emacs 2.2 包括之前的版本字体设定通过 ~/.Xresource 文件,并不支持 Xft freetype,好在 SVN 的 emacs 已经支持 unicode 和 Xft freetype,并 有人为 ubuntu 打了包。 添加下面的设定到 /etc/apt/source.list
# emacs snapshot deb http://ppa.launchpad.net/avassalotti/ubuntu gutsy main
sudo apt-get update sudo aptitude install emacs-snapshot-gtk注意,PPA 仓库中的 deb 包密钥并未包含在 ubutnu keyring 中,安装的时候需要手工确认。 增加设定代码到 ~/.emacs
(set-default-font "DejaVu Sans Mono-10") (set-fontset-font (frame-parameter nil 'font) 'unicode '("DejaVu Sans Mono-10" . "unicode-bmp")) (set-fontset-font (frame-parameter nil 'font) 'han '("SimSun" . "unicode-bmp"))
参考资料:
公司网站改版,索性扔掉 drupal 改用 symfony,维护起来会方便很多。
试试 bleeging edge trunk 先,大体上是一致的,虽然半年没用 symfony,遇到问题参考 symfony/docs 和以前代码即可, 未更新到 symfony 1.1 的 plugin 直接 svn export 过来,大多可以正常使用,一切设定停当,移植 utilities 和 basic class,卡壳在 propel,symfony 1.1 将 propel 拆分出去为单独的 plugin (which is good),从现在看来还不稳定,并且实际使用的话,需要 compat 10 layer,旧的 helper 系统还未移植过去。1.1 的 widget、validator、event 等都还没有文档。时间紧张,没有时间看代码 debug(还记得 symfony 1.0 beta 时候花费很多时间找 symfony 的 bug),所以做出决定,放弃 symfony 1.1!
回到 1.0 stable,再熟悉不过了,搭建基本系统,配置数据库,创建 frontend app,安装 plugin,试验 sfGuardPluin 一切停当之后,发现非常之 lack of feature! 没有 editor profile,request password,RBAC 对公司门户来说是杀鸡用牛刀,放弃 sfGuardPluin。
从以前项目移植 signup/login/user 等,一切顺利。
新的网站需要 blog 系统,sfSimpleBlogPlugin 功能简单,本这够用就好的原则,安装测试,buggy,propel-build-model task 失败(sfGuardPlugin 正常),最致命的是无法定制 module 名称,http://blah.com/sfSimpleBlog 这样的 URL 对我来说是无法接受的,放弃 sfSimpleBlogPlugin。
两次使用 plugin module 的失败经验让我确信不用再看 sfSimpleCMSPlugin 了,新闻栏目本来需求就很简单。
try, try, try,try 掉宝贵的一天时间。明天任务很重了。
创建 backend app,移植 layout,menu system。
创建 blog 数据库 schema,用以前写的 Comment plugin scaffolding 出基本的带评论功能的 frontend blog module。CommentHelp 是 ajax based,对这个项目来说太复杂了,注释掉 templates 中用于 display comment 部分的代码,放到后面再考虑。
使用 propel-init-admin 创建 blog post, blog post comment 后台模块,定制 generator.yml,增加 TinyMCE 编辑器, 导入 sfMediaLibaryPlugin 提供图片媒体支持,搞定 blog 后台部分。
news schema,后台模块;ask schema,系统后台。fixture 功能还是比较若,手工写代码初始化测试数据。
移植分页系统,更新分页 helper,开始 blog 前台部分,列表需要现实博客文章 summary,暂时去除 html tag 好了,抓出一段完整的 html tag 的话,估计会比较浪费时间,之前使用 drupal,这个问题就让我非常不爽。
blog 的显示页面,URL 使用 permalink,格式为 blog/:year/:month/:day/:permalink,permalink 为去除特殊字符后的 title,对 SEO 稍有好处。
新闻、问题前台。about 模块,添加 routing 保证 URL 和原系统一致。
首页,CSS fixing。
用户个人信息设置,找回密码功能。
testing, bug fixing。
上线。
使用 sfSugarCRMPlugin 模块处理 lead caputures。
使用 awstats 分析日志,找出 Error 404。调整 routing,保证旧系统链接可用。
SEO,添加 meta 信息,调整系统 title。
添加 RSS blog 订阅功能。
We are done!
有个项目需要转移到另外一个 SVN 仓库,查了 SVN 手册未找到仓库部分转移的办法,跑去 Freenode IRC #svn 频道问人,有人回答: “I haven't done it, but your best bet is to mix 'svnadmin dump' and 'svnadmin load' and 'svndumpfilter' in some way”。我担心有 revision number conflict 的问题,不过还是试试先好了。
假设需要导出的项目为 legacy repository 下的 blah。
$svnadmin dump /media/work/legacy/svn/repos > dumpfile $cat dumpfile | svndumpfilter include blah > blah-dumpfile $svnadmin load /var/lib/svn
还好,两个 repository revision numbers 差距很大,import 很顺利。 cehckout 出来时候检查历史等,一切正常,^^
Apple 的 Leopard 这个月 26 号上市,而 bt 上的 leak 版本已经被验证就是 GM 版,文件大小 6.6 个 G,Holy shit。买来 DL 的刻录光盘,结果不知道是 6 快一张的三菱光盘太劣质还是我最近人品不足,MBP 895 自带的光驱无法为刻录光盘设置正确的激光频率。网上看到有人通过火线硬盘安装成功,拿来我的 USB 移动硬盘,试试先,还好昨天清空了一个分区,料事如神了一把,^^
格式化移动硬盘分区为 Mac OS 分区格式,挂载上 DMG,恢复 Mac OS Install CD 到 移动硬盘的分区。重启,refit 会自动认出后这个可启动的 Mac 分区,选择进入后直接进入安装界面,安装很顺利,不过并没有看到传说中的定制安装类型和语言选择界面(应该是我看的不够仔细),reboot,进入系统之后确认默认用了升级安装,网络、iTunes、Docks 等一切正常, so far so good。
注:我的系统使用了 refit 来 trip boot Linux/Vista,一般的 Mac 用户在系统设置里面选择启动光盘为 USB 上的分区即可。
试用了个把小时,Dock 和 菜单的 UI 的改动的确让人很不舒服,fake 的 3D 和透明菜单栏都让人更迷糊,焦点不集中,Dock 中的已打开程序改用图标倒影中的亮点,远没有 Tiger 中的三角图标来得直观,Mac OS X 10.5 Leopard: the Ars Technica review 诚不我欺。
Leopard 是 Mac 家族首款通过 UNIX 兼容性认证的操作系统,从目录结构组织来看,沿袭了 Apple 的传统方式,我还是很难习惯。基于对 UNIX 兼容性认证的信耐和盲目崇拜,我愿意相信对 Unix 下软件的兼容性会大大增强。对于开发者来说 Leopard 最大的更新之一应该是集成了 DTrace 调试工具,加上前端 XRay 用起来非常爽了。Leopard web 开发支持这块的亮点非 自带 Rails 莫属了,版本为 1.2.3。rails 这两年的走红加上 rails 的核心开发者清一色的都用 Mac,使得 Mac 在 rails 社区的流行度度很高,看之前的 rails 大会就知道,几乎全是 MBP,apple 当然也知道这是个双赢,于是早早的就对 rails 社区承诺,leopard 将内置 rails。Leopard 的 apache 升级到了2.2,PHP 也终于升级到了 5.2.4,python 为 2.5,为 web 敏捷开发提供了强有力的支持。
Asterisk 是开源的电话交换系统,算得上是企业应用了,不过貌似目前市场比较小,加上刚开始在国内有一定的知名度,其背后的 digium 公司生产的板卡在中国就很不好买,国内目前还没有 digium 的 distributor,找到一家广州的企业号称是 reseller,先不管资质定了一块 4FXO 卡。N 通电话,肝火上升,总算是等来了卡。佛里德曼说“世界是平的”已经有 6 个年头, 北京地铁到处可见 UPS 的广告,处在这样的一个时代,从国外 ship 过来前后半个多月的时间,不禁感叹平坦世界的世界还是偶尔会有“惊喜”。
之前已扫过 asterisk 电话未来之路、asterisk without tears,乘机器没到手,先在 VMWare 上安装个 trixbox,熟悉一下,再决定是用 Debian 还是 trixbox。
// quote from http://www.zimbra.com/forums/installation/6443-debian-etch-4-0-install.html#post41225 before you start, *setup your DNS*. Zimbra install is very sensitive to correct DNS setup, particularly /etc/hosts and forward resolution of the hostname you are installing on as returned from hostname. Search wiki/forum for correct DNS setup. change /etc/debian_version to 3.1 apt-get install sudo curl fetchmail libgmp3c2 libssl0.9.7 libdb3 chmod a+rwx /tmp tar -xzf上面所说还是有一些不符的地方,安装脚本名称为 ./install.sh,修改过后按照法安装顺利。 安装之前需要注意端口冲突,先停掉如 apache 等可能端口冲突的程序。cd zcs/ clean out previous attempts: sh install -u rm -rf /opt/zimbra rm /tmp/install* rm /tmp/zmsetup* rm /tmp/*zim* change util/utilfunc.sh if [ $PLATFORM = "UBUNTU6"]; then to if [ $PLATFORM = "UBUNTU6" -o $PLATFORM = "DEBIAN3.1" ]; then sh install.sh Strangely detects hostname as domainname (never quite understood why it does this). Select 'Yes' for "Change domain name", change to domainname "domain.com" instead of "host.domain.com" If you haven't set your MX yet, ignore (you'll need to set this later but its fine for install): DNS ERROR - none of the MX records for ijichi.org resolve to this host It is suggested that the MX record resolve to this host Re-Enter domain name? [Yes] ^^ Choose "No" Install Menu: Choose 6 for zimbra-store, 4 for Admin Password, enter password, 'r' or for previous menu, 'a' to apply, Enter for next two questions: Save configuration data to a file? [Yes] Save config in file: [/opt/zimbra/config.15938] Then 'Yes' for: The system will be modified - continue? [No] yes Checkout output carefully for *any* errors, should install fine. You can change /etc/debian_version back to 4.0 after install but you'll have to change it for each upgrade
// quote from http://wiki.zimbra.com/index.php?title=ZimbraApache su - zimbra zmtlsctl https tomcat restartso far so good,直到
su - zimbra zmprov ms `zmhostname` zimbraMtaAuthHost mail.example.com
#less /var/log/messages May 13 23:19:34 localhost kernel: NETDEV WATCHDOG: eth1: transmit timed out May 13 23:19:34 localhost kernel: sky2 status report lost? May 13 23:19:39 localhost kernel: NETDEV WATCHDOG: eth1: transmit timed out May 13 23:19:39 localhost kernel: sky2 status report lost? May 14 10:32:37 localhost syslogd 1.4.1#18: restart. May 14 10:32:37 localhost kernel: klogd 1.4.1#18, log source = /proc/kmsg started.google 了一下,gentoo 的论坛有用户指出是 kernel 驱动有问题,gentoo 的两位工程师已经提交了 patch 并进入了 2.6.21,从论坛上用户使用 2.6.21 的使用反馈来看并不相同,有些用户问题依旧存在,etch 的内核是 2.6.18,anyway,编译 2.6.21 内核先。
#wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.1.tar.bz2 #wget -c ftp://ftp.linuxforum.net/ftp.kernel.org/linux/kernel/v2.6/linux-2.6.21.1.tar.bz2 #tar jxvf linux-2.6.21.1.tar.bz2 #ln -s linux-2.6.21.1 linux #cd linux #make menuconfig #make-kpkg clean #fakeroot make-kpkg --revision=Custom.1.0 kernel_image #fakeroot make-kpkg --revision=Custom.1.0 kernel_headers #dpkg -i linux-image-2.6.21.1_Custom.1.0_i386.deb #dpkg -i linux-headers-2.6.21.1_Custom.1.0_i386.deb #cd /boot #mkinitrd -o /boot/initrd.img-2.6.21.1 2.6.21.1 #vim grub/menu.lst // 加入 initrd /boot/initrd.img-2.6.21.1 #reboot重启过后使用一段时间发现还是有异常日志,不过新驱动好像在异常发生后,会重启 eth1 sky 网卡。继续使用小段时间有用户报告网通线路无法访问,我尝试着手工重启了一把,结果导致整个网通线路不同,登录上去后使用网通线路 ping 网通 DNS 又居然是通的,从其它机器 traceroute 的时候无法连到网通网卡,奇怪!再次重启,问题解决,目前正常运行一天,未出现异常情况,good,继续观察。 UPDATE: 2007-06-02,问题依然存在,2.6.21 不会导致内核崩溃, 但在 88E8050 网卡经常停止工作。
(WW) Warning, couldn't open module nvidia (II) UnloadModule: "nvidia"荒谬!继续 google ing...,好在是个老问题,讨论很多。 原因是 NVIDIA 96XX 在 Xorg 7.2 之前发行的,不支持新的 Xorg 标准,work around 很简单:
#./NVIDIA-Linux-x86-1.0-9631-pkg1.run --x-module-path=`X -showDefaultModulePath 2>&1 | cut -d, -f1` --x-library-path=`X -showDefaultLibPath 2>&1`这次 X 顺利启动,熟悉的 NVIDIA Logo 过后,进入 KDE 桌面,可是桌面飘移的问题依然存在,祭上终极武器,手工调整显示器解决,好在 windows 也是基本不用的。
The major highlights in this first beta of the eZ Components 2007.1 are the new components Authentication (database, ldap and typekey based authentication) and Workflow, a component to provide the core functionality of an activity-based workflow system including the definition and execution of work flow specifications. Other additions include a new type of diagram to the Graph component (radar charts), a new MS-SQL driver for the Database component, automatic generation of classes for use with PersistentObject, SSL support in the Mail component and many other small improvements.伴随第一个 beta 版本的发布,期待已久的 Workflow Component 也从 experimental 进了 eZ Components,意味着 API 已经稳定,接下来的几个星期会完善文档,等不及的话可以先看代码,eZ Components 代码质量本来就非常高,更何况 Workflow Component 和 PHPUnit 的开发者是同一人 :Sebastian Bergmann。 Sebastian Bergmann 原本是要做一套完整的 workflow 管理系统,后来读了几篇论文之后改变主义,决定做一套核心功能的 Component,多亏如此,我们才有了 eZ Workflow Component。
前些时日买了个移动硬盘,卖盘老板好心给我分了区,谁知回家发现 Linux 无法读取硬盘内容,起先怀疑硬盘盒是不是有问题,挂到 windows 上,一切正常,于是看了把 dmesg :
SCSI device sda: 234441648 512-byte hdwr sectors (120034 MB) sda: Write Protect is off sda: Mode Sense: 03 00 00 00 sda: assuming drive cache: write through sda:<6>usb 2-1: USB disconnect, address 2 sd 0:0:0:0: SCSI error: return code = 0x00010000 end_request: I/O error, dev sda, sector 0 Buffer I/O error on device sda, logical block 0 sd 0:0:0:0: rejecting I/O to device being removed Buffer I/O error on device sda, logical block 0 unable to read partition table sd 0:0:0:0: Attached scsi disk sda
硬盘已经找到了,读取的时候发生了 IO 错误,google 一把,找到了个德语的论坛,google 翻译一下,大致说确定是低版本 kernel 对 MSDOS 分区支持有问题,系统是 kernel 2.6.17,2.6.21 已经放出,正好更新一下内核,于是下载、编译 (记得打开 MSDOS 分区表支持)、重启,问题果然解决。
OmniTI Labs is our repository for some of the projects we generate while working on stuff for clients, for our products, or just on things that we think are cool. The website is a way for us to give this code back to the community.目前的项目不多,Alexandria 是其中之一,包含了 Mailer/Transport/OpenID/UUID/XmlRpcClient 等类,代码还未能看到,先放出的是文档。倒是很期待看看 omniti 的东东是不是和他们说的一样 cool,:- )
|
You are mild-mannered, good, strong and you love to help others. |