| |
| |
| |
| |
|
2008年12月28日星期日
Weekly Twitter 2008 #52
2008年12月21日星期日
Weekly Twitters 2008-#51
| |
| |
|
2008年12月14日星期日
Weekly Twitter 2008-#50
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
2008年12月7日星期日
Weekly Twitter 2008 #49
| |
|
2008年11月30日星期日
Weekly Twitter 2008 #48
| |
| |
| |
| |
| |
| |
|
2008年11月23日星期日
Weekly Twitter 2008 #47
| |
| |
| |
|
2008年11月16日星期日
Weekly Twitter 2008 #46
| |
| |
| |
| |
|
用SciTE作为XUL的入门开发工具
开发XUL应该有这么几种情况:
- 开始学习XUL,试验各种控件、XPCOM,不会涉及到chrome包。这种情况下只需要编辑XUL 和JavaScript,并能够预览就差不多了,能支持调试更好
- 开发Firefox/Thunderbird扩展,这种情况下打包、部署、调试都是必须的,有用于创建扩展的向导更好
- 开发独立的XULRunner应用程序,当然也需要跟2差不多的功能,但模式有些不同
- 开发Remote XUL应用,这个比较少见,可以忽略
- XUL编辑器。基本的需求是一个XML编辑器,能够支持语法高亮、基本的well-formed检查(或者结构树、代码折叠等方式可以辅助发现XML错误)。高级一点的需求是能够提供XUL widget的代码完成,能够支持DTD entity自动完成,能够支持内嵌JavaScript的编辑
- JavaScript编辑器。基本的需求也简单。高级的需求是能识别xpcom组件,从而显示里面的方法
- 部署
- XPCOM组件浏览器
- JavaScript Debugger
- DOM Inspector
- Chrome包结构浏览器,能够查看有哪些包能加载进来了。如果能识别overlay就更好了。(chrome list)
2008年11月2日星期日
Weekly Twitter 2008 #44
| |
| |
| |
| |
| |
| |
|
2008年10月5日星期日
《X档案》的第二部电影 I Want to Believe 主要是给fans准备的
刚看了《X档案》的第二部电影 I Want to Believe,去豆瓣上做记录时留意到,大部分人给了三分。
这部片子不是为一般的观众准备的,他们可能觉得这部片子没讲一个完整、明白的故事。它不是《七宗罪》、《人骨拼图》,也不是《沉默的羔羊》。
这部片子也不是为那些科幻迷准备的,因为这里也没有再继续《X档案》的主线故事: 外星殖民阴谋论。
这部片子更加不是为那些只看过前面一两季,或者只看过电视台里前面配过音的少数几集的观众们准备的,喜欢看那几集还算不上一个The X Files的粉丝,或者说你们无法有足够的基础去了解这部片子在讲什么。
这部片子是为*真正的*X档案迷准备的。如果你完整看过200集《X档案》(好吧,最后两季除了大结局可以不算,虽然它们也很精彩,但跟这里 是有些不搭界),那你就明白,这部电影其实不是在讲这个案子本身,而是在讲信念,讲坚持。而需要你相信和坚持的东西其实你也不一定知道它就是对的。所以它其实 是在讲勇气。
四年前,我看完了《X档案》大结局(虽然这最后几集我留了很久),结束了三年的。陡然间,怅然若失,仿佛体内一个什么部件丢失了,空空的。
若干年过去了,陡然发现,虽然他们都老了,Mulder还是那个Mulder,Scully也还是那个Scully,还有Skinner。
还是很喜欢——虽然不觉得可以直接推荐给其它朋友看。
---------------------------------------------------
看这部片子其实挺费劲,原来买了一张D版碟,结果中文字幕很烂,有些对话没翻译,有些又明显不对。我想切换到英文字幕(想凑合着试试,虽然有英文字幕也不大听得懂),但碟子上又延续了一个D版碟的传统:英文字幕不相干,不知道搞了个什么东西的字幕。
然后从网上下rmvb格式,字幕翻得也烂,我能听出不少词压根没出现在字幕中。最大的问题是根据字幕没法看懂对话,总感觉隔了一层。
最后干脆从射手网下载了字幕,这才凑合。这个字幕似乎是shipper(如果你不懂这个词,你肯定不是上面的说fans了)翻译的,里面有不少的批注,比如Scully说"你的执著让我爱上你",他加上了"感动",Mulder答复说"但也正如你所说那也是我们无法在一起的原因",他加上"木头"; 还有后面Skinner拿衣服给Mulder御寒,"同人万岁",哈哈。
TCShell2 1.5.7: Associate .rar/.zip/etc with Total Commander
1.5.7 (2008-10-05)
* Archive associations:
|+ Now you can double click to set the description for an extension
|+ Support jar/xpi/r00/r01 as TC's built-in archive
|+ Refresh archive associations after Apply clicked
- Fixed a bug when restoring old associations
+ Support opening in source/target panel ( /S )
下载:
http://sites.google.com/site/bamanzi/tcshell2/TCShell2-1.5.7.zip?attredirects=0
http://bamanzi.inlsd.org/win32/totalcmd/TCShell2-1.5.7.zip
* Archive associations:
|+ Now you can double click to set the description for an extension
|+ Support jar/xpi/r00/r01 as TC's built-in archive
|+ Refresh archive associations after Apply clicked
- Fixed a bug when restoring old associations
+ Support opening in source/target panel ( /S )
下载:
http://sites.google.com/site/bamanzi/tcshell2/TCShell2-1.5.7.zip?attredirects=0
http://bamanzi.inlsd.org/win32/totalcmd/TCShell2-1.5.7.zip
2008年10月4日星期六
倡议: Debian/Ubuntu用户都来安装apt-p2p吧
装上apt-p2p, 我们就可以在各个用户之间自动传递软件包了,可以有效减轻镜像服务器负担,并减小对单一镜像服务器的依赖。
安装很简单:
然后重新执行一下apt-get update就可以了。
安装很简单:
- apt-get install apt-p2p
- 修改/etc/apt/sources.list,将你使用的repos服务器改成localhost:9977,类似下面这样
然后重新执行一下apt-get update就可以了。
2008年9月26日星期五
更新: Dictionary Tooltip支持爱词霸的脚本
更新了一下Dictionary Tooltip支持金山爱词霸网站(http://www.iciba.com)的脚本。不打算支持stardict.org了,网站太慢,开放的词典太少。
Dictionary Tooltip是个Firefox扩展,可以让你双击一个单词就在线去查词典,将结果显示出来(不是新开一页,而是在当前页内显示,可以过滤不相关的内容)。
将以下内容添加到(firefox profile)
/dictionarytip/dictionarytip_dictScript.js尾部即可。
(2008-10-5 更新: 做了补充说明,并修订了一下脚本)
Dictionary Tooltip是个Firefox扩展,可以让你双击一个单词就在线去查词典,将结果显示出来(不是新开一页,而是在当前页内显示,可以过滤不相关的内容)。
将以下内容添加到(firefox profile)
/dictionarytip/dictionarytip_dictScript.js尾部即可。
--- >8 --------------------------------------------------------------
--- 8< --------------------------------------------------------------
dtip_arrDict[19]=
{
dictName : "www.iciba.com",
url : "",
subCatName : " *",
subCatValue : " *",
selectedText : "",
assignUrl : function(selectedText, prefLang)
{
this.url = " http://www.iciba.com/" + selectedText + "/";
this.selectedText = selectedText;
},
filterPage : function (ftDoc, prefLang, strNoResults)
{
try
{
var elemId = "dict_content";
var newDiv = "";
if (ftDoc.getElementById(elemId) != null)
{
newDiv = ftDoc.getElementById(elemId).cloneNode(true);
ftDoc.body.innerHTML = newDiv.innerHTML;
}
}
catch (ex)
{
alert(ex);
}
}
}
dtip_strDictText += ";www.iciba.com"
(2008-10-5 更新: 做了补充说明,并修订了一下脚本)
2008年9月20日星期六
推荐的Total Commander工具箱
(以下的东东除了单独注明的外,均可以在http://www.totalcmd.net上找到)
主程序:
其它的lister插件( XML, SynPlus, ICLView, eml, xbaseview)可以安装到外部浏览器UniversalViewer中去
FileSys插件:
Packer: z, msi-plus, bzip2, deb, rpm, cpio, mbox, diskdir, iclread, nscopy,
Lister: iclview, xml, xbaseview, eml
FileSys: ext2fs
Content: xpiinfo, exif, deb, rpm
主程序:
- 对于新手,推荐安装Shanny美化版本(TCEE)
- 汉化: TCEE里面带有中文语言包,也可以直接到官方网站Languages上去找,那里还有中文的CHM格式帮助文件(比hlp好的是可以搜索文字)
- 7z: 不用说
- mhtunpack: 可打开mht,提取里面的文件
- chmdir: 可打开chm/hxt,提取里面的文件
- isoread/totaliso: 前者可解压iso/bin/nrg/img/,后者可解压和制作ISO镜像
- scilister: 基于scintilla的文件查看器,速度很快,不能编辑,非常适于浏览代码文件(需要SciTE <= 1.72,并且这个插件要放在scite安装目录中)
- syn2: 不错的编辑器
- ieview: IE,用于查看网页
- imagine: 浏览各种图片文件(如果有irfanview也凑合)
- fileinfo: 可查看exe/dll/lib等文件的一些信息(PE信息、动态库输出/依赖、LIB输出函数列表)
其它的lister插件( XML, SynPlus, ICLView, eml, xbaseview)可以安装到外部浏览器UniversalViewer中去
FileSys插件:
- UnInstaller: 用于卸载程序,控制面板里那个实在让人等得不耐烦
- Startup Guard: 管理那些自动启动的程序,可禁用或者删除
- Services: 删除、启动、停止服务
- ProcFS: 查看运行中的进程,可“删除”进程
- Virtual Disk: 虚拟磁盘,除了可以虚拟光驱代替DaemonTools,还可以虚拟硬盘、软盘
- 似乎大多没啥用。常用exif和xpiinfo这两个
- PlugMan: TC插件管理器
- FavMenu2: 在TC/资源管理器/打开文件对话框 /浏览目录对话框中跳到常用的目录(以及TC中当前显示的目录),常用目录列表缺省读自TC的hotlist
- UniveralViewer: 可浏览各种文件,支持TC的lister插件
- F4Menu: 将TC的外部编辑器(F4)设置为此功能,可显示一个打开此文件类型的常用程序列表
- TCShell2: 可给目录关联一个“在TC中打开”菜单,也可将压缩文件关联为TC打开(后面一个功能为本人添加的,基于TCShell-1.3.6的代码)
Packer: z, msi-plus, bzip2, deb, rpm, cpio, mbox, diskdir, iclread, nscopy,
Lister: iclview, xml, xbaseview, eml
FileSys: ext2fs
Content: xpiinfo, exif, deb, rpm
2008年9月16日星期二
JavaScript也够魔幻的
可支持按如下方式使用,而且这几个方法不是在一个函数实现中判断arguments.length来走不同分支的,而是可以动态添加方法的——当然,由于JavaScript不是静态类型语言,只能根据参数个数来决定走那个实现,不能根据参数类型
我开始也觉得不可能,但看了一阵,觉得Filebug的显示比较奇怪,为什么它不把filter作为一个成员,再在下面显示数组内容呢? 然后我用for (e in params) { alter(e) }试了一下,发现它有属性就叫做"filter[0][data][type]"!
这是怎么设进去的呢?以前看文章说JavaScript中foo.bar=1和foo["bar"]=1是等价的, 当然现在不经过params.filter[0]就直接设置params.filter[0][data][type]="string"是不行的,所以估计是这种方式: params["filter[0][data][type]"]="string"——不过也说明了这两种不是等价的。至于为什么要这么写,据后来另外一个同事说PHP里面可以直接用上这样的数据(我是不懂)。
var users = new Users();作者说的private members,其实只是在constructor中声明的变量和函数,没有挂到this后面,根据JavaScript的闭包原则,constructor中声明的函数是可以访问这些private变量和函数的,但在constructor之外(比如通过classFoo.prototype.funcB = function(...) {...}创建的方法)的就无法访问这些东西了。所以作者称constructor里面通过this.funcA = function(...) {...}方式添加的成员函数为priviliged method.
users.find(); // Finds all
users.find("John"); // Finds users by name
users.find("John", "Resig"); // Finds users by first and last name
users.find("John", "E", "Resig");
- 属性名一定要满足标识符规定么?
然后他想去取有多少个filter,然后逐一处理。但访问params.filter时出错,访问params.filter[0]时也出错。但上面连数组内各个值都显示出来了啊。params
filter[0][data][type]="string"
filter[0][data][value]=2
filter[0][type]="field"
start=0
limit=20
我开始也觉得不可能,但看了一阵,觉得Filebug的显示比较奇怪,为什么它不把filter作为一个成员,再在下面显示数组内容呢? 然后我用for (e in params) { alter(e) }试了一下,发现它有属性就叫做"filter[0][data][type]"!
这是怎么设进去的呢?以前看文章说JavaScript中foo.bar=1和foo["bar"]=1是等价的, 当然现在不经过params.filter[0]就直接设置params.filter[0][data][type]="string"是不行的,所以估计是这种方式: params["filter[0][data][type]"]="string"——不过也说明了这两种不是等价的。至于为什么要这么写,据后来另外一个同事说PHP里面可以直接用上这样的数据(我是不懂)。
2008年9月14日星期日
Firefox上的命令行: Ubiquity和Vimperator
前几天Firefox的新扩展Ubiquity掀起了一个热潮,都说是浏览器上人机交互的突破。
GUI的优势在于上手比较容易,而CLI的优势在于效率更高。其实Ubiquity并不是第一个这么干的,这之前的vimperator扩展 也早通过模拟vi里面的ex命令的方式,实现了Firefox上的命令行,比如输入:tabopen google就能在新的标签页中打开http://www.google.com ,输入 :dialog addons就能显示"附加组件"对话框,也可以跟ubiquity一样扩充新的命令。但vimperator的主要目的在于模仿vi/vim的操作方式,"模"的问题决定了很多人不会使用,或者不愿使用。
(BTW: 最开始vimperator给我看Google Reader造成了很大的不便,因为快捷键都得先按一下Ctrl-V才行,烦得要命,好在不久发现可以用autocomand在某些网址上禁用vimperator的键拦截(在vimperator中输入:help autocommand 可以找到相应说明,不过那个网址匹配表达式需要懂一点JavaScript才能搞懂怎么写)
不过Ubiquity似乎比普通CLI要跟强一些,还可以利用命令的输出与网页交互。以官网的视频里 的第一个例子来说,以前我们要跟朋友相约去哪里吃饭,发电子邮件时需要这样:先到某个网址查饭馆联系方式,然后将内容拷贝粘贴到邮件中,然后又 Google Maps上找相应的地图,然后点击拷贝图片和链接到邮件中,最后发送。但现在只需要在写邮件时,用map命令查出地图,点击一些"insert into page"就可以将地图直接放入邮件了,而饭馆的信息则可以通过yelp来查然后添加到邮件中(当然,这些命令对应的网站能否服务于我这里是另外一个不得 不考虑在内的问题)——这倒有点象vi中用!!调用外部命令并将其输出插入到当前文本中来。
GUI的优势在于上手比较容易,而CLI的优势在于效率更高。
(BTW: 最开始vimperator给我看Google Reader造成了很大的不便,
不过Ubiquity似乎比普通CLI要跟强一些,
2008年9月11日星期四
Ubuntu vs Debian 杂感几则
看见这么一篇文章: I'm TualatriX:叹: Ubuntu的软件包比Debian还稳定。 他说的“稳定”是Debian里面的stable/testing/unstable的概念,指的是软件包的版本新旧。
- 其 实我也早发现Ubuntu的不少包比Debian更新慢。想想也是,毕竟现在不是当初Ubuntu只做GNOME桌面的时候,当越来越多的人来给他添砖加 瓦,也就使得大家需要的软件包越来越多,当它的摊子越铺越大的时候,它不可能保证所有的包都能很快更新。也就是说,只可能部分比debian新,而那些平时不在焦点之中的包,就比debian更新得慢了。
- 以前在犹豫要不要切换到Ubuntu时,我的一个顾虑就是以为它 只有GNOME,其它的软件包大多没有(我还是会跑某些Qt/KDE甚至一些老X11程序的),当后来别人告诉我Debian有的包它都有,我就一直不太 相信——它怎么可能维护那么多软件包,又能保持“焦点”软件的快速更新? (后来这个顾虑打消后,我又有了另外一个问题:Ubuntu里面有testing这样的概念么?——这个问题导致我到现在也没有换用Ubuntu,当然, 另一个重要原因是最近一年工作太忙,没时间来折腾这些。)
- 以前我们对Debian的更新速度颇多抱怨,尤其是稳定版本的推出节奏。现在想来,摊子大还的确是个问题,君不见,当Ubuntu的摊子铺大之后,虽然仍然一年两个版本,但质量却在下降,作为LTS的8.04质量并不是太好,连续推出了8.04.1和8.04.2?
- Linspire决定不再基于Ubuntu,要回归Debian的原因是什么呢?我没仔细去看,但也许这能说明一点啥。
- 也 许我是有点嫉妒,但我觉得Ubuntu的成功有Debian的基础在,但风头都被Ubuntu抢去了。如果不是Debian强大的包依赖机制、升级/安装 管理系统,以及alternatives, menu等小机制,Ubuntu不会有精力去优化内核、搞炫桌面。我是有点打抱不平的。
- 关于Debian的包管理系统,我看见这样一篇文章 "红帽将在未来的RHEL中支持deb软件包", 但没有找到原文,不知道是否属实。里面说道: 红帽(RedHat)总裁卫赫士(Jim Whitehurst)透露,未来的RHEL(红帽企业版Linux)将加入对DEB软件包的支持。卫赫士说,“众所周知,红帽创造了RPM,并成为了一 时的Linux工业标准。但是RPM一个很大的缺点就是软件包的依赖性很难解决。以Ubuntu为代 表的使用DEB软件包的Linux发行版拥抱自由开源,取得了很大成功。虽然为了避免Linux陷入像Unix那样的分裂局面,Linux厂商一致遵守 LSB标准。但这还不够,所以红帽将在未来的RHEL中加入对DEB包的支持,并计划逐渐削弱RPM包,直到最终取代。”
- 我 有一个朋友,装东西特喜欢装最新最炫的东西,他开始玩Linux的时候,总是要装最新版本的gcc(同时他是一个C++超级fans),装最新版本的 KDE(他觉得GNOME太简陋了, 不够炫)。最开始的时候他听说用Fedora/RedHat的人最多,结果为了加装软件折腾得够呛。后来在我的劝说下改用Debian(关键是我也不怎么 会用Fedora,我只会用apt-get来装软件 :-(,本来觉得Mandrake给他用倒是更合适,urpmi也好使,但实在不知道有没有快一点的镜像),但他现在恋恋不忘的是要改用Ubuntu——不过他最近工作也忙,估计Linux连摸都不摸了。
2008年8月31日星期日
GTK+ Preference Tool for Windows
GTK+ for Windows Runtime Environment - GTK+ Preference Tool[en]
GTK+ Preference Tool is an utility for easy theme and font switching for GTK+ applications. You can download the utility as a standalone source/binary in the Downloads section. It is also included in the latest GTK+ Themes packages.
Note: There may be some problems with fonts and colors when switching to/from MS-Windows theme. This seems to be a theme and/or GTK+ bug. The workaround is to restart the theme selector after switching to/from MS-Windows theme.
Screenshot
2008年8月10日星期日
《三体2: 黑暗森林》以及合法性问题
2008年7月25日星期五
Windows如何编译python 2.4的pyd模块
今天试图安装envisage,但它提供的最新版本都是为python 2.5提供的,于是我下载了源代码来自己编译,结果enthought.traits这个包里面有个pyd动态库,需要编译。
执 行python setup.py install,它先说找不到gcc,我把gcc-mingw的位置加到PATH中,但编译无法通过,链接是有一大堆的_imp_Pyxxxxx找不到。 看这个前缀,好像是Microsoft Visual C++编译器的习惯,而Windows上的python官方版一向都是用msvc编译的(不知道他们怎么不用gcc)。
总不至于要我安装 一个Visual Studio吧,而且python 2.4是用VS.NET 2003编译的(sys.version里面显示编译器版本为v.1310)。在网上找了半天,找到一个Visual C++ 2003 toolkit(微软已经不再提供下载,各位得仔细找找)。
但还是折腾了半天才搞定,方法如下:
1. 安装Visual C++ 2003 toolkit, 它只包含编译、链接工具,以及基本的C/C++库。
2. 安装Platform SDK (用gcc-mingw的库和头文件也可以)
3. 修改distutils/distutils.cfg,将编译器由mingw改为msvc (好像是上次安装gcc-mingw时它设置的,不过我用gcc-mingw一直没成功编译)
4. 修改distutils/msvccompiler.py,将MacroExpander.load_macros()里面对dotNet Framework的检测代码删掉(有必要检查这个么,奇怪); 然后仿照Python 2.5的做法修改MSVCCompiler.initialize(),改成如下(Python 2.5里面那个对MSSDK环境变量的检查也是没有必要的)
执 行python setup.py install,它先说找不到gcc,我把gcc-mingw的位置加到PATH中,但编译无法通过,链接是有一大堆的_imp_Pyxxxxx找不到。 看这个前缀,好像是Microsoft Visual C++编译器的习惯,而Windows上的python官方版一向都是用msvc编译的(不知道他们怎么不用gcc)。
总不至于要我安装 一个Visual Studio吧,而且python 2.4是用VS.NET 2003编译的(sys.version里面显示编译器版本为v.1310)。在网上找了半天,找到一个Visual C++ 2003 toolkit(微软已经不再提供下载,各位得仔细找找)。
但还是折腾了半天才搞定,方法如下:
1. 安装Visual C++ 2003 toolkit, 它只包含编译、链接工具,以及基本的C/C++库。
2. 安装Platform SDK (用gcc-mingw的库和头文件也可以)
3. 修改distutils/distutils.cfg,将编译器由mingw改为msvc (好像是上次安装gcc-mingw时它设置的,不过我用gcc-mingw一直没成功编译)
4. 修改distutils/msvccompiler.py,将MacroExpander.load_macros()里面对dotNet Framework的检测代码删掉(有必要检查这个么,奇怪); 然后仿照Python 2.5的做法修改MSVCCompiler.initialize(),改成如下(Python 2.5里面那个对MSSDK环境变量的检查也是没有必要的)
6. 启动vc2003 toolkit的Command Prompt,然后按如下方式编译
def initialize(self):
self.__paths = []
if os.environ.has_key("DISTUTILS_USE_SDK") and self.find_exe("cl.exe"):
# Assume that the SDK set up everything alright; don't try to be
# smarter
self.cc = "cl.exe"
self.linker = "link.exe"
self.lib = "lib.exe"
self.rc = "rc.exe"
self.mc = "mc.exe"
else:
//原来的老代码
set MSSDK=Platform SDK或者gcc-mingw的安装目录
set include=%INCLUDE%%MSSDK%include
set lib=%LIB%%MSSDK%lib
python setup.py install
2008年7月23日星期三
最近感兴趣的一些东东(非技术方面 )
就写两则与科幻有关的吧:
- Philip K. Dick的科幻名著《Ubik》将登陆大荧幕 。 以前我在blog上也提到过有好几部有名的科幻电影是根据这个天才的作品改编的。后来出了《预见未来》Next。我还发现遗漏了《致命报酬》Paycheck和《黑暗扫描仪》A Scanner Darkly 。另外,两周前《看电影》在《银翼杀手》推出25周年最终剪辑版推出之际介绍了一下当时片子的诞生过程,还讲解了一下剧情,才发现自己根本没看懂,连主角Rick也是复制人都没看出来。 欢迎加入豆瓣上的Philip Dick小组。
最近感兴趣的一些东东
好久没写blog了,其实感想还是有不少,但前段时间工作比较忙,同时在下班后尽力远离电脑(为了身心健康:-)。
最近感兴趣的一些东东:
技术方面:
最近感兴趣的一些东东:
技术方面:
- FBReader 电子书阅读器,可以在很多PDA/手机上用,Motorola版本最近发了0.8.14(上次能找到的版本还是两年前的0.7.4,这个版本支持chm、支持从压缩文件读取文件,而且操作方面也跟Anyview有得一拼了(Anyview还是0.3最好使,后面3.x版本实在不怎样)。另: 国内的论坛真没劲,下载个东西还老要注册)
- UnMHT: Firefox扩展,可用于打开/保存mht格式,代替原来的Mozilla Archive Format扩展(这个扩展已经不再维护了)
- FreeMind: 思维导图(mind mapping,类似于鱼骨图,用于整理思路)软件。FreeMind除了使用起来比较方便之外,比较强的是可以生成一个Flash,其他人就可以查看 了。这是采用Java写的开源程序,如果Java对你而言是个问题,网上有很多免费不免费的工具,对于Linux上,可以查看这个网页上列出的软件
- AideRSS: 是不是用了RSS reader订阅了很多新闻,多得你都看没时间看完呢?怎么找出最有价值的东西?AideRSS服务的目标就是给每条新闻提供rank,以便你可以看到哪 些是”最红“的。它还提供了Firefox上对Google Reader的支持,使得可以直接过滤出最有价值的新闻
Envisage: 采用Python实现的Eclipse?
Eclipse让人不爽的就是体积、速度和插件版本配合。
以前看NewEdit/Ulipad,发现它的可扩展性也挺强的,它的基本思想就是mixin, 而看见Peppy这个继承EMACS思想的编辑器就更引发我想: 有没有采用Python实现的、类似于Eclipse的项目/平台。
然后找到Envisage,一个基于python的应用程序框架,关注不同插件的配合与组合,设计思想上参考了Eclipse。界面采用wxPython,也有workspace, perspective, text editor这些东西。
但Eclipse最大的优势是目前已经深入人心,有相当多各种各样的插件了,这是其它东西暂时(也许永远?)无法比肩的。
以前看NewEdit/Ulipad,发现它的可扩展性也挺强的,它的基本思想就是mixin, 而看见Peppy这个继承EMACS思想的编辑器就更引发我想: 有没有采用Python实现的、类似于Eclipse的项目/平台。
然后找到Envisage,一个基于python的应用程序框架,关注不同插件的配合与组合,设计思想上参考了Eclipse。界面采用wxPython,也有workspace, perspective, text editor这些东西。
但Eclipse最大的优势是目前已经深入人心,有相当多各种各样的插件了,这是其它东西暂时(也许永远?)无法比肩的。
2008年4月22日星期二
Pidgin飞信插件win32版本更新到0.98
作者gradetwo已经将申请了一个sourceforge.net项目, 将飞信插件的代码放到了其上的cvs(取代码方法)。
因为宽带到期还没去续,最近上网机会很少(也想逃离颈椎病一阵:-()。
今晚在我妹这边上网,重新编译了更新到了0.98版本,但仍然只有pidgin-2.3.1的版本, 因为这些日子我的电脑给被我妹用,结果被她弄得中了木马, 我没法上网下载新版本的代码(就目前这个版本也是在安全模式下编译的,然后到另外一台机器上上传:-), 等重装之后吧,不过估计可以在pidgin-2.4上用。
http://bamanzi.inlsd.org/gnuwin32/pidgin-fetion/fetion-0.98-pidgin-2.3.1-win32.7z
因为宽带到期还没去续,最近上网机会很少(也想逃离颈椎病一阵:-()。
今晚在我妹这边上网,重新编译了更新到了0.98版本,但仍然只有pidg
http://bamanzi.inlsd.org
2008年3月20日星期四
JavaScript上的闭包(closure): 第二种说法
而Martin Fowler对闭包的介绍却是另外一种解释: 闭包就是一段可作为参数传递的代码。从他提供的示例来看只是个匿名函数,跟嵌套函数没有什么关系,其他人也给出了C#、Python和JavaScript上的例子,却跟上面的不一样。
而现在嚷嚷得比较厉害的Java支持也是依照这种概念: http://www.infoq.com/cn/news/2007/09/catching-up-with-closures
按照这种定义,闭包非常类似于C语言中的函数指针、C++里面的模板函数、Java中的内嵌类,虽然Martin Fowler在他文章里也在说明闭包跟这些概念的不同时提到了运行环境的问题,但似乎没有什么说服力,至少从例子上是看不出来的。
个人感觉,前面一种说法是正确的,这种说法不大对。虽然Martin Fowler的名气很大。
- Array.prototype.select = function(func)
- {
- var ary = [];
- for (var i = 0; i < this.length; ++i)
- {
- if (func(this[i]))
- ary[ary.length] = this[i];
- }
- return ary;
- };
- function managers_noclosure(emps) {
- var result = [];
- for (var i = 0; i < class="delimiters1">)
- {
- var e = emps[i];
- if (e.isManager) result[result.length] = e;
- }
- return result;
- }
- function managers(emps)
- {
- return emps.select(function (e){ return e.isManager; });
- }
而现在嚷嚷得比较厉害的Java支持也是依照这种概念: http://www.infoq.com/cn/news/2007/09/catching-up-with-closures
按照这种定义,闭包非常类似于C语言中的函数指针、C++里面的模板函数、Java中的内嵌类,虽然Martin Fowler在他文章里也在说明闭包跟这些概念的不同时提到了运行环境的问题,但似乎没有什么说服力,至少从例子上是看不出来的。
个人感觉,前面一种说法是正确的,这种说法不大对。虽然Martin Fowler的名气很大。
JavaScript上的闭包(closure)
闭包这个概念随着并发、函数式编程的复兴,也热乎了起来。”跟上Java闭包(Closure)的步伐“一文中说:
注 意sayAlert是sayHello的一个嵌套函数,当var say = sayHello('Bob')这行执行完之后,因为say是对内部函数sayAlert的一个引用,所以这个函数对象不会被释放,而sayAlert的 执行环境(execution context)也不会被释放,一个函数与它的数据、执行环境绑在一起,这个sayHello就是一个闭包了。
这里有好几个概念: 嵌套函数,函数引用,作用域链(scope chain),执行环境。从目前看见的资料来看,闭包的构成必须有这几个要素。
Mark Jason Dominus在Perl概述中的话语作为开场:在未来的三十年中,人们将会取笑那些发明没有闭包特性的语言的人,如同他们现在正取笑那些发明没有递归这种特性的语言的人是一个道理。
- 定义
In computer science, a closure is a function that is evaluated in an environment containing one or more bound variables. When called, the function can access these variables. The explicit use of closures is associated with functional programming and with languages such as ML and Lisp. Constructs such as objects in other languages can also be modeled with closures.这个说法比较抽象。还是来看看实际的例子吧。
In some languages, a closure may occur when a function is defined within another function, and the inner function refers to local variables of the outer function. At runtime, when the outer function executes, a closure is formed, consisting of the inner function’s code and references to any variables of the outer function required by the closure.
- 实例说明
- function sayHello(name) {
- var text = 'Hello ' + name; // local variable
- var sayAlert = function() { alert(text); }
- return sayAlert;
- }
- var say = sayHello('Bob');
- say();
注 意sayAlert是sayHello的一个嵌套函数,当var say = sayHello('Bob')这行执行完之后,因为say是对内部函数sayAlert的一个引用,所以这个函数对象不会被释放,而sayAlert的 执行环境(execution context)也不会被释放,一个函数与它的数据、执行环境绑在一起,这个sayHello就是一个闭包了。
这里有好几个概念: 嵌套函数,函数引用,作用域链(scope chain),执行环境。从目前看见的资料来看,闭包的构成必须有这几个要素。
- 作用
- var f, g;
- function foo() {
- var x = 0;
- f = function() { return ++x; };
- g = function() { return --x; };
- x = 1;
- print(f()); // "2"
- }
- foo();
- print(g()); // "1"
- print(f()); // "2"
- 两个不同功能、相互独立的函数只能通过全局变量交换数据么(这里说语言本身提供的能力,而不是平台提供的能力)? 上面例子中两个函数都操作了变量x,但x并不是全局变量,但对于其他函数也是不可见的。可见第一个作用是提供另一种手段来供两段程序交换数据,同时保护变 量安全
- 两个闭包建立之后,只需要根据两个引用就可以调用了,这两个引用相互独立,但又是完全自包含的,——这显然是函数式编程的风格了
2008年3月18日星期二
PyCon 2008总结
PyCon 2008前两天开了, 但国内的Python社区似乎都没有见到什么人关注(至少在CPUG的Planet of Woodpecker.org上没人提到这个, Google了一下也没有多少中文信息, 倒是台湾的Python社区有网友说起,并且参会了)。
在Planet Python上看到一篇PyCon 2008 notes, 详细地说明了一下他参加的几个主题的内容,推荐!
在Planet Python上看到一篇PyCon 2008 notes, 详细地说明了一下他参加的几个主题的内容,推荐!
- Using Python To Teach Object-Oriented Programming in CS1
- MPI Cluster Programming with Python and Amazon EC2
- Applying Expert System Technology to Code Reuse with Pyke
- Rich UI Webapps with TurboGears 2 and Dojo
- State of Django
- High performance Network IO with Python + Libevent
- Plenary: Twisted announcement: they have a foundation
- Plenary: You *can* Fool All of the People All of the Time
- Plenary Keynote: Intellectual Property and Open Source
- SQLAlchemy 0.4 and Beyond
- Managing Complexity (and testing)
- Using Grok to Walk Like a Duck
- Case Study of Python Application Development — Humanized Enso
- To RE or not to RE — Parsing text in Python
- Plenary: Making Client-Side Python Suck Less
- Plenary Keynote: Snake Charming the Dragon: the past, present and future of Python and Mozilla
- Plenary: OLPC Update
- Consuming HTML
- nose: testing for the lazy coder
- Introducing Agile Testing Techniques to the OLPC Project
Firefox 3上Google Reader无法显示内容的问题: Firebug惹的祸
现象: Firefox 3上访问Google Reader时,只显示顶部的一些链接,那个黄色的"loading"就一直不消失,内容也就出不来
原因: 禁用Firebugs扩展即可
定位方法:
另外,家里的机器上用Firefox 3访问Google Reader就崩溃,不知道为啥,从beta 2到beta 4一直有这个问题(每出一个beta版本我都会试一下)
原因: 禁用Firebugs扩展即可
定位方法:
- 开始看见"loading"一直在,以为跟Google Mail一样,是网速问题导致内容无法显示出来;
- 后来逐渐发现Firefox 2上没有问题;
- 在Google上搜索"Firefox 3 Google Reader"没有什么有效结果,看来不是使用Firefox 3的人都有这问题
- 试验Firefox的"安全模式",正常了,看来是扩展的问题
- 对扩展使用折半定位: 先禁用一半扩展,重启Fx,看是否有问题,有问题则将被禁用的扩展缩小一半再试,没问题就将未被禁用的扩展减少一般再试。这样我的20多个扩展,只要5次就可以定位出来了:是Firebug!
- 禁用Firebug扩展, 好了
另外,家里的机器上用Firefox 3访问Google Reader就崩溃,不知道为啥,从beta 2到beta 4一直有这个问题(每出一个beta版本我都会试一下)
采用TiddlyWiki搭建blog
前几日一直在琢磨把俺的Blog迁移到这个玩意儿上来,好处在于:
- 所有文章都在一个网页内, 几百篇文章加起来也没有多大,而且要分多页也很简单
- 这一个网页可以既是最终发布的地方,也是编撰系统
- 随便找个能上传网页的地方就可以搭建blog了,万一都没有,在http://www.tiddlyspot.com上申请一个账户也行
- 丰富的插件,自己想怎么玩就怎么玩
如果将TiddlyWiki改造成更适合blog的系统,我的一些心得如下:
- 用RecentTiddlersPlugin或者WeblogPlugin自动在页面打开时显示最近的文章
- 采用TagCloudPlugin插件,在MainMenu中添加一个"标签云"
- TW原本的风格是双击帖子就进入编辑模式,如果你觉得这样不适合于blog系统,可以在选项中将页面设置为网上只读模式,或者采用ReplaceDoubleClick将双击功能改造一下
- CommentScript能增加留言功能
另外下面这几个插件虽跟blog关系不大,也是应该有的:
- 从这里取得最新的中文翻译,将其作为插件加入,保存后再打开就会变成中文界面了
- 添加GotoPlugin或者SearchOptionsPlugin,替代原来的搜索功能(原来的搜索会自动打开匹配结果,即使你在只输入了两个字符之后就停顿了一下...)
- 添加FullScreenPlugin或者ToggleLeftSideBar这类插件(后者其实不是插件,而是借助InlineJavascriptPlugin实现功能的脚本),使得用户可以将文章最大化;添加CollapseTiddlerPlugin或者[FoldHeadingPlugin|http://www.tiddlytools.com/#FoldHeadingsPlugin]] 使得用户可以将文章最小化(可以将帖子折叠起来,只显示标题)
前面说的是对最终页面呈现有用的插件,但还需要东西来帮助我们撰写文章:
- WikiBarPlugin可以在编辑文章时显示一个工具条(不过IE对CSS支持太差,工具条的下拉菜单显示不出来),免得你记不住那么多wiki语法(不同的wiki语法还不一样:-()——当然,宏还是应该记熟悉的
- tiddlytools提供的QuickEditPackage也可以提供WikiBar那样的工具条,但我还没搞明白怎么挪用过来:-(
- TiddlerTweakerPlugin会允许你自行修改每个tiddler的作者、创建时间、修改时间,如果你想迁移你的blog系统肯定用得上
但这几个插件体积都比较大,直接加到你的TW中会导致最后的HTML比较大,加载太慢,而放在网页上对阅读blog的朋友又没有什么作用,这就可以采用将这些插件用外部文件的方式来加载了,LoadExtPlugin就是干这个的(该网站还提供了一个不小的主题包)。
2008年3月6日星期四
TiddlyWiki: 单网页的Wiki, GTD或者blog系统
这几日迷上了TiddlyWiki这个东西, 仅仅一个网页, 却将JavaScript,CSS和DOM的功能发挥到了极致。当年看见Gmail的时候惊叹网页上的东西也可以做得这样易用,而到了TiddlyWiki这里发现Gmail也不算啥了。
简单地说,从名字上可以看出,它具有一些wiki的功能,但它自带条目(它管这叫做tiddler)的管理,点击名称时时显示内容到中间区域——其实这就是一个简单的笔记软件了,并且不用安装任何其他的软件,我以前都用notecase来记录一些琐碎的东西,但现在用不着了。
如果只是这样,还不算什么,但它还有宏、主题、导入、导出等等功能。更强的是跟Firefox, Eclipse这样的东西类似,有一个很好的扩展机制,结果是有太多的插件使得我们可以把它做成一个GTD系统或者blog系统,Blog before you Think这篇文章就介绍了各种变体。
唯一的限制在于这些编辑只能在本地文件上做,网页自身没有机制将内容提交到服务器上去。不过也有网站提供TiddlyWiki服务(http://www.tiddlyspot.com),使得可以将服务保存到服务器,甚至下载到本地,修改完成后再点击网页上一个链接就上传了。
前几日一直在琢磨把俺的Blog迁移到这个玩意儿上来,反正几百篇文章加起来也没有多大。只是一篇篇贴过来觉得麻烦,懒了。诸位可以看看初步效果http://bamanzi.tiddlyspot.com/。
简单地说,从名字上可以看出,它具有一些wiki的功能,但它自带条目(它管这叫做tiddler)的管理,点击名称时时显示内容到中间区域——其实这就是一个简单的笔记软件了,并且不用安装任何其他的软件,我以前都用notecase来记录一些琐碎的东西,但现在用不着了。
如果只是这样,还不算什么,但它还有宏、主题、导入、导出等等功能。更强的是跟Firefox, Eclipse这样的东西类似,有一个很好的扩展机制,结果是有太多的插件使得我们可以把它做成一个GTD系统或者blog系统,Blog before you Think这篇文章就介绍了各种变体。
唯一的限制在于这些编辑只能在本地文件上做,网页自身没有机制将内容提交到服务器上去。不过也有网站提供TiddlyWiki服务(http://www.tiddlyspot.com),使得可以将服务保存到服务器,甚至下载到本地,修改完成后再点击网页上一个链接就上传了。
前几日一直在琢磨把俺的Blog迁移到这个玩意儿上来,反正几百篇文章加起来也没有多大。只是一篇篇贴过来觉得麻烦,懒了。诸位可以看看初步效果http://bamanzi.tiddlyspot.com/。
2008年2月25日星期一
小看了Lua
虽然我一直对于脚本语言比较偏爱,但也一直没把Lua看上眼,认为它功能太弱了,只能“螺蛳壳里做道场”;而喜欢这个东西的似乎也都是搞C++的那些喜欢研究语言技巧的人。
但今天无意翻了一些wxLua,对这个东西有了兴趣,然后又顺便看了一些Lua本身,发现这个东西以前还真没意识到它的价值。
先拿wxLua来说,wxWidgets有不少脚本语言的binding,从wxPython, wxRuby到wxJS, 其实差别都不是特别大,但wxLua有些不同,至少它在使用模式上很适合于这样一种情况:快速开发一些小的程序(其它方面我还没来得及考虑,暂且不提)。
一 方面,适合这种情况的东西很少: 虽然可以用wxPython快速开发,但对于做一个程序来说,发布起来比较麻烦(py2exe还是有些够折腾的);Visual Basic和Delphi这类工具,可以快速开发,发布程序也方便(抛开VB程序采用的ActiveX库不谈),但它们是商业软件,同时又是庞然大物。所 以我看见一些同事用Excel的VBA来开发一些简单程序,也有比较geek的人学习AutoIt。
另 一方面,wxLua自己也做得很适合这个。从规模上而言,wxJS比wxLua大不了多少,但wxLua将脚本解释器、wxWidgets对象全都做到了 一个可执行程序中,不需要任何动态库;它还提供了一个wxLuaFreeze工具,可以将Lua脚本跟这个解释器绑定到一个文件,用法相当简单,并且还可 以采用UPX这类工具对最终程序进行“透明”压缩。
这样来看,lua算是一个非常好的胶水语言(glue language), 在表现上可以嵌入在程序中完全隐形,同时带给程序的累赘也少(至少我们的产品目前采用Active Scripting就必须得将可脚本化的对象包装成COM对象,这个工作量可大了去了)。
不过,“五行拳”(Programming in Lua中文翻译版中引用了一段金庸《碧血剑》里的文字,意在比喻“极寻常的拳术",只要练习得好了,”每一招均是含劲不吐,意在拳先,举手抬足之间隐含极浑厚的内力”)也有一点点不爽,比如我现在想在wxLua的脚本代码中操纵COM对象,就得仔细琢磨怎么将LuaCOM的代码合进来才行,回头要另外一个功能又要合代码,这种情况可能还不如py2exe方便了(不过还没琢磨过Lua的代码,不知道何如这些特性简单不)——但“需要什么才加什么”这种方式也挺不错的。
但今天无意翻了一些wxLua,对这个东西有了兴趣,然后又顺便看了一些Lua本身,发现这个东西以前还真没意识到它的价值。
先拿wxLua来说,wxWidgets有不少脚本语言的binding,从wxPython, wxRuby到wxJS, 其实差别都不是特别大,但wxLua有些不同,至少它在使用模式上很适合于这样一种情况:快速开发一些小的程序(其它方面我还没来得及考虑,暂且不提)。
一 方面,适合这种情况的东西很少: 虽然可以用wxPython快速开发,但对于做一个程序来说,发布起来比较麻烦(py2exe还是有些够折腾的);Visual Basic和Delphi这类工具,可以快速开发,发布程序也方便(抛开VB程序采用的ActiveX库不谈),但它们是商业软件,同时又是庞然大物。所 以我看见一些同事用Excel的VBA来开发一些简单程序,也有比较geek的人学习AutoIt。
另 一方面,wxLua自己也做得很适合这个。从规模上而言,wxJS比wxLua大不了多少,但wxLua将脚本解释器、wxWidgets对象全都做到了 一个可执行程序中,不需要任何动态库;它还提供了一个wxLuaFreeze工具,可以将Lua脚本跟这个解释器绑定到一个文件,用法相当简单,并且还可 以采用UPX这类工具对最终程序进行“透明”压缩。
这样来看,lua算是一个非常好的胶水语言(glue language), 在表现上可以嵌入在程序中完全隐形,同时带给程序的累赘也少(至少我们的产品目前采用Active Scripting就必须得将可脚本化的对象包装成COM对象,这个工作量可大了去了)。
不过,“五行拳”(Programming in Lua中文翻译版中引用了一段金庸《碧血剑》里的文字,意在比喻“极寻常的拳术",只要练习得好了,”每一招均是含劲不吐,意在拳先,举手抬足之间隐含极浑厚的内力”)也有一点点不爽,比如我现在想在wxLua的脚本代码中操纵COM对象,就得仔细琢磨怎么将LuaCOM的代码合进来才行,回头要另外一个功能又要合代码,这种情况可能还不如py2exe方便了(不过还没琢磨过Lua的代码,不知道何如这些特性简单不)——但“需要什么才加什么”这种方式也挺不错的。
2008年2月9日星期六
wxWidgets和MFC混合编程
很多文章都讲到了将MFC程序迁移到wxWidgets上(首先要读的也许是IBM developerWorks上这篇 将MFC应用程序移植到Linux),但对于一个比较大的程序,要一下子完成移植也显得有些艰巨。所以我在琢磨有没有可能在一个程序中同时使用这两种技术(同时我看中了wxWidgets上使用wxPython时给应用程序带来的可扩展性,有兴趣的可以查看wxPython中的这个embed示例)。
wxWidgets的代码库中倒是有一个wx和MFC混合的例子(发布出来的2.6的代码包里面好像没有,2.8才有),它演示了如何在一个程序中分别有wx和MFC的窗口(分属于wxFrame和CFrameWnd类)。
但它没有解答的问题是:怎样将一个wx的控件放到MFC上面去,或者反过来。
在这个例子中,如果你想将wx的窗口作为应用程序开始时显示的窗口,就需要这个:
wxTreeCtrl * wxtree = new wxTreeCtrl(.....)
CDummyWindow *dummy = new CDummyWindow((HWND)wxtree->GetHWND());
dummy->SetParent(this);
我们需要其实不要CDummyWindow也没有问题,只要这样:
wxTreeCtrl * wxtree = new wxTreeCtrl(....)
::SetParent(HWND)wxtree->GetHWND(), m_hWnd);
wxWidgets的代码库中倒是有一个wx和MFC混合的例子(发布出来的2.6的代码包里面好像没有,2.8才有),它演示了如何在一个程序中分别有wx和MFC的窗口(分属于wxFrame和CFrameWnd类)。
但它没有解答的问题是:怎样将一个wx的控件放到MFC上面去,或者反过来。
在这个例子中,如果你想将wx的窗口作为应用程序开始时显示的窗口,就需要这个:
m_pMainWnd = new CDummyWindow((HWND) wxTheApp->GetTopWindow()->GetHWND());
如果你了解MFC对窗口的封装,就知道它基本没有自己的东西,CWnd这些类基本上没有自己的数据成员,基本上都是调用Windows API(只是把那些API中的HWND参数给省略了。所以任何一个Windows桌面上的窗口,要体现为一个CWnd类对象是很容易的,只需要调用CWnd::FromHwnd()或者CWnd::Attach()就可以了,示例中的CDummyWindow就是这样做的。基于这样的思路,我们很容易把其它的wx控件通过CDummyWindow放到MFC控件中去。wxTreeCtrl * wxtree = new wxTreeCtrl(.....)
CDummyWindow *dummy = new CDummyWindow((HWND)wxtree->GetHWND());
dummy->SetParent(this);
我们需要其实不要CDummyWindow也没有问题,只要这样:
wxTreeCtrl * wxtree = new wxTreeCtrl(....)
::SetParent(HWND)wxtree->GetHWND(), m_hWnd);
但这里有另外一个问题: 创建一个wxWindow对象时是必须给出一个parent的,而这个parent又必
必须是wxWindow类型(除非为NULL)。
反过来要将MFC的东西放到wx上面就可以那么好运了,虽然也可以用上面这一招将MFC的控件显示出来,
但这些控件低于wx来说是透明的,你没法利用到wxSplitterWindow的分割功能,没法利用上各种layout manager/sizer。
在wxWidgets For MFC Programmers(from wxWidgets Wiki)中讲述了如何将一个CWnd转换为wxWindow对象:
wxWindow * win = new wxWindow();
win->SetHWND((WXHWND)hWnd);
win->AdoptAttributesFromHWND();
win->Reparent(wxGetApp().GetTopWindow());
2008年2月8日星期五
终于将blog迁移完成了
从去年初开始将blog迁移到Blogger上,直到今天,才算终于完成了。
我原来的blog在Linux伊甸园上(巴蛮子的新破茅屋),开始有迁移的想法是在去年初,主要的原因是Linux伊甸园提供的Blog服务经常当机,并且每次出了故障之后,总会有一些文章丢失(这几个月陆续按以前的一些本地“备份”来重新发帖,才发现差不多丢了1/3)。
但一直也不直到迁移到哪里去好,试过blogbus, CSDN, chinaunix,最后基本上觉得Blogger功能上比较适合我这Blog的风格,而且Blogger提供的版面编辑功能还是挺好使的。
但中间又犹豫、反复,一方面因为国内常常无法访问blogspot.com,另一方面otto老大又热情地邀请我回去,我也在试用linuxeden
但最终Blogger的"自定义发布位置"这一功能让我觉得还是采用Blogger了:我可以在其它地方申请一个网站,然后采用ftp/sftp发布方式,将所有文章发布到这里(目前的镜像是 http://bamanzi.inlsd.org/blog ),这样一方面可以解决blogspot.com无法访问的问题,另一方面我可以通过ftp将所有文章备份下来。
不过搬迁过来,文章不会在其它地方出现,访问的人也少了。反正这一年我写得也少了,凑合着过吧。
我原来的blog在Linux伊甸园上(巴蛮子的新破茅屋),开始有迁移的想法是在去年初,主要的原因是Linux伊甸园提供的Blog服务经常当机,并且每次出了故障之后,总会有一些文章丢失(这几个月陆续按以前的一些本地“备份”来重新发帖,才发现差不多丢了1/3)。
但一直也不直到迁移到哪里去好,试过blogbus, CSDN, chinaunix,最后基本上觉得Blogger功能上比较适合我这Blog的风格,而且Blogger提供的版面编辑功能还是挺好使的。
但中间又犹豫、反复,一方面因为国内常常无法访问blogspot.com,另一方面otto老大又热情地邀请我回去,我也在试用linuxeden
但最终Blogger的"自定义发布位置"这一功能让我觉得还是采用Blogger了:我可以在其它地方申请一个网站,然后采用ftp/sftp发布方式,将所有文章发布到这里(目前的镜像是 http://bamanzi.inlsd.org/blog ),这样一方面可以解决blogspot.com无法访问的问题,另一方面我可以通过ftp将所有文章备份下来。
不过搬迁过来,文章不会在其它地方出现,访问的人也少了。反正这一年我写得也少了,凑合着过吧。
2008年1月29日星期二
《X档案》和《老友记》剧本CHM
在box.net上申请了一个账号,将《X档案》和《老友记》剧本CHM传了上去。
http://public.box.net/bamanzi
这个账号本来是为了上传ScrapBook中保存的文摘才申请的——我在ScrapBook的网站上看见了ScrapBox.net这个扩展的扩展。
网页速度有点慢,但上传、下载还不是太差。
以后一些非技术的东西或者体积比较大点的东西就传到这里吧。技术方面的东西还是在 http://bamanzi.inlsd.org 上
http://public.box.net/bamanzi
这个账号本来是为了上传ScrapBook中保存的文摘才申请的——我在ScrapBook的网站上看见了ScrapBox.net这个扩展的扩展。
网页速度有点慢,但上传、下载还不是太差。
以后一些非技术的东西或者体积比较大点的东西就传到这里吧。技术方面的东西还是在 http://bamanzi.inlsd.org 上
2008年1月24日星期四
pidgin: 让MSN支持发送自定义表情的补丁(附win32版本)
在Planet Debian TW上看见的Jesse提供了一个pidgin补丁版本(Debian sid), 其中MSN协议可以发送自定义表情图标了(原来只能接收),补丁来自http://developer.pidgin.im/ticket/1187。
向他询问了一下之后,我编译了一个win32版本:
http://bamanzi.inlsd.org/gnuwin32/pi...-win32.tar.bz2
需要先安装官方的2.3.1
先在主窗口"工具- Smiley"里面配置自定义表情,然后(目前好像得先重启pidgin)就可以在MSN的聊天窗口里使用这些表情了。
向他询问了一下之后,我编译了一个win32版本:
http://bamanzi.inlsd.org/gnuwin32/pi...-win32.tar.bz2
需要先安装官方的2.3.1
先在主窗口"工具- Smiley"里面配置自定义表情,然后(目前好像得先重启pidgin)就可以在MSN的聊天窗口里使用这些表情了。
2008年1月17日星期四
pidgin飞信插件的win32版本
感谢gradetwo昨天放出了pidgin上飞信插件的源代码,俺今晚有空,编译了一个win32版本。
pidgin-fetion-0.96-win32.tar.bz2
(可用于pidgin-2.3.1,解压后将libfetion.dll放到x:\Program Files\Pidgin\plugins\下,重启pidgin即可)
代码只需要做一点小修改: fetion-0.96-win32.patch
pidgin-fetion-0.96-win32.tar.bz2
(可用于pidgin-2.3.1,解压后将libfetion.dll放到x:\Program Files\Pidgin\plugins\下,重启pidgin即可)
代码只需要做一点小修改: fetion-0.96-win32.patch
编译方法:
- 先按pidgin网站的win32版本编译 说明编译pidgin. 注意以下几点:
- 并不一定需要安装cygwin,cygwin安装起来比较麻烦。其实可以从tcl网站下载一个msys + mingw就可以了;
- 主要w32api版本要在3.9以上。老版本在编译pidgin\win32\gtkdocklet-win32.c时会报告BITMAPV5HEADER没有定义;
- 如果没有安装perl和tcl,不一定要按网站上说的那样去下载安装,直接修改libpurple\\plugins\Makefile.mingw和pidgin\plugins\Makefile.mingw,注释掉相关行就行了
- 在libpurple下解压fetion-0.96的源代码(即存在pidgin-2.3.1/libpurple/fetion目录)
- 打上补丁fetion-0.96-win32.patch
- 执行make -f Makefile.mingw,编译得到libfetion.dll
2008年1月12日星期六
多媒体和即时通讯方面的几个新玩意
- 这几天发现了多媒体和即时通讯(这两类也算网民们用电脑最普遍的用途吧)方面的几个新玩意:
- 网络电视GMLive (图,开发团队blog,使用说明)
- 目前支持MMS, sopcast, nslive等几种流媒体,UI还比较简单
- 网络视频nslive (LinuxToy上的介绍,图, 作者的Blog, 安装方法说明)
- 上面提到过的一种流媒体。支持可用性上做的不太好,那个安装说明也够难找的。
- Flash Player 9.0 (Debian包)
- 新版本支持Linux下的全屏了(并且支持硬件缩放hardware scaling)
- Audacious
- 喜欢Winamp/XMMS的可以用这个了( XMMS -> BMP -> Audacious,功能界面都差不多,都可以用winamp的skin;BMPx和XMMS2却是另外一条路了)。至于功能方面,id3 tag的乱码还是避免不了的,除非自己改代码;另外我现在看重网络音频的支持了(比如电台或者last.fm),很多时候懒得自己去下载mp3文件。
- 飞信的pigdin插件 (可以放到$HOME/.purple/plugins/或者/usr/lib/purple-2)
- 当然是第三方开发的。目前有基本功能:对聊或者发短信。最近几天作者gradetwo改 进很频繁,代码还没有放出来。我已经迫不及待要编译win32版本了:在Windows上时如果MSN、QQ、Google Talk、飞信、V网伴侣这些都打开,机器都没法玩了。也不知道现在这些软件怎么搞的,为了界面漂亮一点点,都要拼图片来做,搞得这些软件好用内存相当严 重。还是用pidgin一统天下好。
- MusicTracker
- A Pidgin 'now playing' plugin to advertise the songs you are listening to in your status message.
2008年1月9日星期三
做了一次系统升级
节前在Debian Package of the Day上看到debfoster的介绍,说是比deborphan可以更进一步清理系统不必要的包,就拉下来玩玩,没想到用它删了一些包之后,使用GNOME时系统老是僵死,除了鼠标箭头,其它啥反应没有(包括Ctl-Alt-Backspace),只能按电源键。
折腾了几日不见起色,干脆就apt-get dist-upgrade再apt-get upgrade了,反正有近半年没做大面积更新了。这次下载了1000多个包,530多M,可折腾了些时间。
结果如下:
折腾了几日不见起色,干脆就apt-get dist-upgrade再apt-get upgrade了,反正有近半年没做大面积更新了。这次下载了1000多个包,530多M,可折腾了些时间。
结果如下:
- 当然,系统不死机了;
- GNOME升级到了2.20,没留意到什么大的变化,倒是首选项精简了许多。另外lunar-applet不能用了,回头重新编译一下试试;
- totem-gstreamer和totem-xine现在可以同时安装了,依靠Debian alternatives连接到/usr/bin/totem (不过我还是不知道gstreamer版本有什么优点,它好像很多格式都不支持)
- 一直在用的小企鹅(fcitx)不好使了,输入条开始可看到,但一开始敲字符就死了。只得切换到scim去;
- 装了个以前在cygwin下试玩过的tilda,感觉用热键呼出比切换到Gnome Terminal方便
- 顺便从Debian multimedia (镜像: http://update.inlsd.org/debian-multimedia/ ) 升级了flash-player(可从这里手工下载安装)。现在可以全屏了,爽。但设置界面还是乱码
- pidgin升级到了2.3.1,没见到明显的改进,反而QQ群功能出现问题:名字都显示成"(NULL)",而且几个"(NULL)"群也区分不开
订阅:
博文 (Atom)