2007年12月28日 星期五

对字符集和编码的一些错误认识

字符集和编码一直很头疼的一块,最近为了搞培训,研究了一下,发现以前确实有很多不明白甚至是错误的认识:
参考文档

标签: ,


2007年12月11日 星期二

PDF文件的分割与合并

装个pdftk就行了。

分割可以采用分段抽取来搞定:
pdftk wxPIA.pdf cat 114-146 output chapter04.pdf

合并:
pdftk chapter0*.pdf cat output part1.pdf

还可以将A文档的某些页和B文档的某些页拼起来:
pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf

添加附件:
pdftk chapter01.pdf attach_files ../chapter-01/* output chapter01a.pdf

拆离附件:
pdftk chapter01a.pdf unpack_files output ./chapter-01/

更复杂的应用还是看项目主页上的文章吧。

另外, 这东西用到libgcj,估计部分是用java写的,反正运行起来有点慢。

标签: ,


2007年6月20日 星期三

关于blogspot.com不能正常访问的问题

这个Blog本来发布在 http://bamanzi3.blogspot.com,但blogspot.com时不时就被GFW给封锁掉。虽然用gladder这样的扩展可以搭个梯子爬过GFW,但这对于读者总是一个麻烦。

我将Blog搬迁到了这里,有朋友还是看出是用blogger.com提供的服务,问是怎么搞的。其实很简单: blogger支持按ftp/sftp的方式发布,将blog文章发布到你指定的ftp站点上。只是这种情况下新的模板就不能用了(就是那个可以拖布局、加部件的模板),只能切换到老模板(Classic Template)。

自己搞个域名应该也可以解决这个问题。

BTW: blogger的中文翻译真不咋的,常常要切回英文才能看懂是啥意思。

标签:


2007年3月27日 星期二

我的学习方法,呵呵

16:24:43 (F)深南大道走到黑 ~ .. says: 又在跑牛么
16:25:00 菠萝油王子 says: 跑牛?
16:25:31 (F)深南大道走到黑 ~ .. says: 你稍微想想难道还不懂么
16:25:53 菠萝油王子 says: 没有,在翻以前泡妞的消息日志
16:26:04 (F)深南大道走到黑 ~ .. says: ....
16:26:20 菠萝油王子 says: 是MSN的 xml格式
16:26:34 菠萝油王子 says: 打算写个小脚本转换成html格式
16:26:46 (F)深南大道走到黑 ~ .. says: 你打算给我看么
16:27:04 菠萝油王子 says: 然后学习了一下python的xml.dom.minidom库的用法
16:27:34 (F)深南大道走到黑 ~ .. says: 你别逗我笑了
16:27:53 菠萝油王子 says: 发现整个库用起来相当麻烦,又到python网站上看哪些xml库比较有名/好用
16:28:11 菠萝油王子 says: 初步选定了elementtree/lxml

标签: ,


2007年3月25日 星期日

FBReader: 电子书阅读器

FBReader – e-book reader for Linux/Windows XP computers

只所以感兴趣,是因为它支持俺的E680i.

标签:


2007年2月12日 星期一

Links 2007-02-12

标签:


2007年2月1日 星期四

英国环保组织称Vista将会导致环境恶化

matrix 写道 "UK Green Party表示Vista的数字版权保护(DRM)需求将迫使许多用户进行不必要的硬件升级。为了完美的运行Vista,将有数以千吨的显示器,显卡等硬 件设备被抛弃,这将对环境造成伤害。未来的考古学家在检查垃圾堆化石的时候将会确定一个“Vista Upgrade Layer”。"

嗬嗬。

标签:


2007年1月6日 星期六

COBOL?

从来没见识过COBOL这种语言,但这两天老看见讨论这个的,奇怪。
其实我对这个东西没有特别的兴趣。只是前几天认识了一位COBOL程序员,幸甚至哉,歌以咏志:-)

标签: ,


2006年11月22日 星期三

雾零:十个空虚的承诺

VaporWare这个名词我是在上期三联杂志上看见的。"Vapor往往被直译为水蒸气,同时它也有自夸的意思,恰恰与很多频繁跳票的产品如出一辙”,于是vaporware就成了哪些老跳票的东西的总称。至于"雾零"这个翻译,也不知道是谁想出来的,感觉不那么靠谱:-)。

10、玛琳?黛德丽的自传
9、只见游戏不见打仗的AH66科曼奇
8、汤姆?福特的电影
7、WiMax的等明天
6、20年拍不完一部圣斗士
5、王朔:留给女儿的俩长篇
4、《印第安那?琼斯 4》
3、SP3难产:为了Vista的敛财
2、只见照片不见能穿的耐克“蓝喷”
1、永远推迟的《永远的毁灭公爵》

记得几个月前写了一篇“那些让我们等了又等的...”, 里面提到Duke Nukem Forever, Total Commander 7等等,如今TC7除了beta版本了,公爵还要我们forever地等待。

标签: , ,


2006年10月29日 星期日

IE7不咋样啊

也下载了一份IE7,主要是以为它在安全性上有所改进,而且到处都在吹它的新界面。但用了几天,觉得不咋样:

Firefox 2.0也下载了,虽然表面上没有什么变化,但实际上有很多贴心的改进,比如会话管理、重新打开刚才不小心关闭的Tab(不过这几项功能通过Tab Mix Plus扩展也可以做到)、能自动导入IE的扩展菜单、网页搜索可自动完成、搜索引擎可删除、SVG的显示等。

标签: ,


2006年10月22日 星期日

技术上的斯德哥尔摩综合症

我在半年前介绍过”斯德哥尔摩综合症“这个专业术语。主要是说在劫持人质的事件中,被劫持者会慢慢地同劫持者产生依赖关系。比如如果劫持者有些迫不得已的理由他们会逐渐相信,比如开始同情劫持者,而劫持者一旦承诺”只要你们乖乖的,保证你们没事“那他们就可能阻止或者检举有所行动的人,甚至劫持者作出一点略微改善他们处境的事情他们甚至会感恩。

刚才无意看见这位”IT自由评论人“的一篇《升级IE7.0的唯一理由》,上面说:

具体我就不反驳了。反正我的第一感觉就是: ”斯德哥尔摩综合症“这个词完全可以在技术方面用起来 :-)

标签:


2006年10月1日 星期日

C++类继承中的几个小问题

是的,我一直是个Delphi的粉丝。虽然现在工作上用的是C++(而且是在用VC/MFC),但一直都没有认真去学习它。前两天听俺们项目组的C ++高手讲解了一些“基本知识”,我还是觉得这个语言太复杂了,陷阱也太多。以下有几个例子(鄙人C++确很粗浅,如有不对的地方,敬请指正)。

[@more@]

第一个例子:

class Base
{
public:
virtual void MethodFoo(std::string s);
}
class Child: public Base
{
public:
virtual void MethodFoo(std::string s);
}
Base *b = new Child;
std::string s("something");
b.MethodFoo(str);

我 们会利用多态性来调用不同的MethodFoo实现,但突然有一天你觉得MethodFoo中间s是不应该发生变化的,于是加了一个const。问题来 了,很多编译器不会告诉你任何告警,但b.MethodFoo再也调用不到派生类的MethodFoo了,除非你把它们一个个都改过来。

第二个例子:

class Base
{
public:
virtual void MethodFoo(std::string s);
}

class Child: public Base
{
public:
virtual void MethodFoo(std::string s);
{
DoSometingMyself();
Base::MethodFoo(s);
}
}

突然有一天,你觉得这个设计不太合理,需要在Base和Child之间再插入一层(class Middle),这就意味着你得修改Child所有函数中类似上面黑体的部分,把它们改成Middle::MethodFoo什么的。

第三个例子:

我 们知道C++中支持多继承,但它对于多个基类中有同名同类型函数的问题没有提供解决方法(也许你会说,我们不应该写这样的代码,但仔细想想X, Y都是接口(C++用纯虚类来做)的情况下,难免会有重名的)。对于X, Y均派生自B,而C又牌证自X+Y这种”恐怖的菱形,它有一个"workaround"是用虚基类,但这要求更改X, Y的代码,使得它们虚拟继承自B。

-----------

是的,这三个问题在Delphi中均可以避免:

1. 要重新实现虚方法必须用override关键字;而带有override声明的方法如果参数不一致,编译器会报错;如果基类中不存在叫这个名字的方法,也会报错。而你确实要用同样的函数名做别的事情,得用reintroduce或者overload关键字。

2. Child::MethodFoo中调用其父类的MethodFoo时不用写Base::MethodFoo,直接写inherited MethodFoo就行了。

3. 采用方法分辨子句即可:

TChild = class(TParent, Interface1, Interface2)
procedure Interface1.MethodFoo = MethodFoo1;
procedure Interface2.MethodFoo = MethodFoo2;
procedure MethodFoo1(s: String);
procedure MethodFoo2(s: String);
end;

标签: , ,


2006年9月24日 星期日

被google玩了一回

昨天看见Google的个性化主页(http://www.google.com/ig)上出现了一个标签页,我正说在个性化主页上放的东西太多了,有待办事宜、一些RSS新闻链接、日历、小游戏、Gmail等等,正好可以用这个将它们分分类。

Google homepage with tabs

谁知道今天再打开Google,这个东西就没有了,所有小组件都堆在一起。

标签:


2006年9月2日 星期六

GUI系统发展史

Graphical User Interface Timeline

里面介绍BeOS时 说: One of the most noted features of BeOS is its use of tabs instead of typical title bars. This perhaps saves a little bit of screen space and definitely gives the windowing system a unique appearance. 这正是我最近用xfwm4的beos风格替代metacity的原因 :-)

罗梅洛说: “我们的计划就是,让全世界游戏制作者都用上NeXTSTEP,让所有人都连到因特网上,让每个人都拥有一辆法拉利。” 到底NeXTSTEP是个怎样的东西,居然有这么大魅力? 这里也有NeXTSTEP的后继OPENSTEP的介绍(这种风格跟我们现在常见的风格差别太大了,都有点边缘化了,搞得GNUstep现在有点冷清)。

P.S: NeXTSTEP和OPENSTEP居然也是Apple弄出来的。

标签: ,


Links 2006-09-01

标签: , ,


2006年8月6日 星期日

Inno setup, 不错

俺现在用Delphi的时候少了,业余也不怎么玩它了,有时候有点手痒。

俺在公司赖以混饭吃的那个产品原来是用 InstallShield做安装程序的,一直用的是个老版本6.22,都好几年了,有很多功能做起来相当麻烦,很多新特性也不支持;加上IS公司又查的 紧,搞得想升级到新版本又被公司卡得紧;俺又不喜欢它一个工程要一大堆目录的风格(而且还不能随便挪目录)。于是就琢磨着换个免费的工具。

NSISInno Setup之间比较了半天之后,选择了Inno Setup,最开始的原因很简单: Inno是用Delphi写的,而且居然支持用Pascal写安装脚本(好像用的是RemObjects Pascal Script引擎)。

用 了一阵下来,感觉不错:

最重要的是,用Pascal写起代码来让我感觉得心应手,干嘛还要另外学习一个语法古怪的语言:-).

标签: , ,


2006年7月15日 星期六

sylpheed-claws(gtk2)总算有了win32版

Here. (没错,目前还不是独立的,只是gpg4win的一部分)

自从切换到gtk2后,sylpheed-claws一直都没有纯win32版本,我本来好几次想来折腾,但既然cygwin版本用得挺好(除了必须得启个X server这点不爽之外)。

标签: ,


2006年6月25日 星期日

网页里的中文输入法

在台湾网友jserv的网站上看到这个,强啊。才装系统又没有搞定输入法的朋友可以用这个来向别人求助了。

简体中文(拼音、英中)

繁体中文

标签:


2006年6月14日 星期三

sourceforge下载文件更麻烦了

每次提到download manager, 总有热心的网友出来让我直接用wget,又稳定又强大。其实我也常用wget直接下载,只是有些时候将网址拷贝下来再贴到终端里面去总还是有点麻烦。

sourceforge 最近就开始在制造这种麻烦了:本来从sourceforge下载文件就得先选mirror, 够麻烦的了,这两天又习惯性的将链接拷贝下来,贴到terminal里,谁知道出现的是── javascript:document.dlform.submit()

实在搞不明白sf“点解要冈样做”。

过了一会儿,Firefox的下载文件对话框又出来了,要是没有安装一个flashgot,还得取消再来。

标签: ,


2006年6月12日 星期一

那些让我们等了又等的...

total commander论坛上,老有人问TC7到底啥时候能出来。本来说是2005年出来的,但到现在还只看见一个内部alpha测试版。

icfu说, I am sure that Duke Nukem Forever will be released before TC 7.

我现在还常常想起7年前读大学的时候玩Duke Nukem 3D的快乐时光。不过Duke Nukem Forever跳票长达八年,也算是个记录了。本来你不做就不做了,但一直还说,我们还在,它很快就会发布......

下面的人跟贴说,还有Vista, IE7呢,于是大家纷纷开列: Hurd, Diablo III, 无冬之夜2, Starcraft 2......

标签: , ,


2006年6月11日 星期日

C/C++的字符串处理效率...咳咳

Shlemiel得到一??在路上?T油漆的工作,他要漆在路中殓的殓?喾指艟?。第一天他拿了一罐油漆去漆好了300瘁的路。「做得真好!」他的老??真「你手倪真快啊!」然後就斤他一??泾板。
第二天Shlemiel只漆了150瘁。「呃?影。??]有昨天好,不咿也??是很快。150瘁也很了不起。」也斤他一??泾板。
第三天Shlemiel只漆了30瘁。「只有30瘁而已!」老??就哇哇大叫了。「呃??在是?o法接受!第一天你漆了十倍的樘度耶!究竟怎?N回事啊?」
「我也?]揠法啊,」Shlemiel真「我每隔一天就滕油漆罐愈?碛?哞啊!」

这人很傻是吧?但C/C++里面字符串处理函数strlen, strcat是怎样实现的呢?

Joel说(英文原文),这就是为什么一些系统一个目录下有上千个文件时就效率急剧下降的原因,也是为什么Excel后来采用了Pascal的字符串处理方式效率就提高了很多的原因。

标签: ,


2006年2月11日 星期六

让ctags支持更多语言

一个例子: 如何让ctags支持vbscript

标签:


2006年2月2日 星期四

如何解决上不了sf.net的问题: tor

最近sf.net又上不去了(估计又是GFW搞的鬼)。

各项目主页(http://prjname.sourceforge.net)可以访问,http://mirror.dl.sourceforge.net/prjname 也可以下载文件,但凡是http://sourceforge.net开头的URL都没法访问。这简直不让人活了。

但办法总是有的: tor. 俺刚从Debian-Chinese邮件列表上学到的(link)。这又是一种分布式的应用,不必原来那样到处找proxy了(而且也不安全——如果你想去访问一些被禁止访问的网站的话:-)

标签: ,


2005年12月9日 星期五

用bogofilter过滤垃圾邮件

原来用thunderbird的时候对它的反垃圾邮件功能印象挺深,就是经过一段的时间的训练之后,它识别垃圾邮件的能力就很不错了。

现在用的是sylpheed-claws,已经自带了SpamAssassin插件,但我觉得SA用起来似乎不是很方便,也不是很有效。这两天在sylpheed-claws邮件列表中有人问如何用bogofilter来检查垃圾邮件,按照回复也试了一下,感觉不错。

  • mutt的设置方法
  • sylpheed-claws的设置方法
  • 标签:


    2005年10月28日 星期五

    xp? sawfish?

    这个窗口边框的装饰是不是有点象sawfish?



    来自deviantART的winxp theme: Opus,至少可以让你的Windows XP的窗口边框小很多,节省不少空间(反正这之前我的xp都是设置为传统样式,而不用XP的缺省风格――我就不明白,M$新增了theme功能,怎么就不能提供一个好一点的缺省theme?)

    标签: , ,


    2005年10月12日 星期三

    这年头,什么spam都有

    这年头,什么spam都有。我这里被comment spam折腾得不敢再开comment功能(看来我得考虑换一个地方写blog了),刚才看新的一期 Debian Weekly News,上面说Debian Wiki也正在被Wiki spam骚扰。

    标签:


    2005年7月5日 星期二

    Help! 怎么批量转换svg图片到其他格式?

    我现在想把一个GNOME的Icon theme里面的图片在其他地方借用一个,但svg格式的支持比较少,所以得转换到其他格式(png, gif什么的)。

    我试过ImageMagick:
    for f in *.svg; do
    f2=`basename $f .svg`
    convert -resize 24x24 $f $f2.png
    done
    但有些图片转换后右方和下方的一些象素会丢失,比如gartoon主题里面一个gtk-stock图片
    gnome-stock-export icon in gartoon theme
    转换后就变成这样了
    gnome-stock-export icon in gartoon theme, bad ouput

    用GIMP试了一下,转换结果倒是很正常,只是因为要转换的文件比较多,用GUI一个个操作是不太现实的。
    (或许可以用Script-Fu? 只是我还不知道这个东西怎么用:-( )

    标签:


    2005年6月4日 星期六

    头一次买了份共享软件

    今天想试试我的银行卡的网上支付能力,就拿“资料收藏大师”做了一下实验,买了一份license。

    这个软件跟ScrapBook的 功能有些类似,但它是一个Windows上的独立应用程序。方便之处在于可以方便地摘录网页上的部分内容,选中了拖过去就行了,格式什么的基本不会乱掉, 对IE和Firefox都支持(我估计是Firefox实现了IDragSource等接口),还可以将书库生成为一个CHM或者PDF文件。

    这个软件以前名字叫“电子书库”,开始还是开放源代码的,后来.....

    我以前的共享软件除了Total CommanderWhereIsIt是靠写插件换来的license,其他的都是用的破解后的D版 :-)。

    标签:


    2005年5月25日 星期三

    Disk Catalog类软件

    我这人是个三脚猫,什么都喜欢玩一玩,GTK/GNOME, Cygwin, Delphi, Python...时间长了,也就搜集了不少东西,所以隔一段时间就把自己近期搜集的东西刻录成一张盘。但刻的盘多了,找东西就费劲了。这时就需要 Disk Catalog类软件。

    在Windows下我觉得比较好用的这类软件是Where Is It。它可以支持多种方式提取文件描述:

    - 从文件中提取描述信息信息,比如HTML文件的标题,MP3文件的歌名、演唱者、专辑名称,PDF的标题、主题和书签,M$ Office文档的标题
    - 从files.bbs, 00index.txt, descript.ion等文件提取文件描述信息
    - 从CDDB服务器提取CD里面歌曲的名称
    - 从图片提取缩略图(thumbnails)
    - 从压缩包类提取文件列表

    另外它还提供了插件接口,网站上提供了不少扩展插件,用户也可以自己用Desc API来编写插件(还是Delphi写的!),我自己就写了用于CSDN index和Debian Package的插件。

    在GNU/Linux上,也试用过一些(基本上只用过基于Gtk/Gnome的),觉得功能比较强一点的也就是gtktalog了。 gtktalog可以做到上面的功能1、4。对于功能1,它可以根据MIME类型调用一个命令行来获取文件的描述信息,而GNU/Linux下有丰富的命令行程序来做这个,比如对于rpm文件可以用rpm -qpi %s提取包的描述,这要比Where Is It的编程接口方便多了。

    (不过gtktalog的MIME判断有点问题,比如对于Debian Package包,通过设置界面添加时,它根据.deb的后缀猜测(guess)出"application/x-deb",我配上对应的命令行 "dpkg-deb --info "之后却根本提取不到包的描述信息,调试之后发现MIME类型应该是"application/x-dpkg",并且在gtktalog设置界面上还不让你添加(说是MIME类型不合法),只能自己修改配置文件~/.gtktalog/gtktalog.cf搞定) 。

    另外GWhere有时也用,虽然功能比较弱,但因为它只需要Gtk2,不需要Gnome库,所以在Windows和Cygwin上都可以编译成功,也就可以跨平台使用。

    标签: , , ,


    Disk Catalog类软件(II)

    还有另外一类Disk Catalog软件,就是象Total Commander的DiskDir, CatalogMaker等插件一样,生成的是一个简单的catalog,其实是文本格式的,但可以在Total Commander里面象查看普通目录一样逐层进入。这种文本格式的好处就是也可以用文本编辑器打开查看、查找,不必非得有一个特定的软件。

    在GNU/Linux下呢?非常简单,用ls -lR /mnt/cdrom > sarge-20050506.lslR就可以生成了!(其实以前带宽都比较小的时候,很多ftp服务器上都有一个lslR.gz文件,用来表明本服务器上都有一些什么东西。)

    那又怎么查看呢?用Midnight Commander(想不到吧)! 在mc的命令行上敲cd sarge-20050506.lslR#lslR就可以象普通目录一样查看这个文件里面的内容了!如果你的extension file(~/.mc/bindings)里针对lslR配置好了Open动作的话,按Enter就可以进入了。

    如果你想要其他格式的支持的话,MC的extfs功能允许你编写一个脚本来扩展这个功能,参考一下/usr/lib/mc/extfs下的脚本吧。[@

    标签: ,


    2005年4月27日 星期三

    也开始玩玩博弈论

    想是受了zhaoway前面帖子的影响,前两天电视里面又重新在放A Beautiful Mind, 又恰好在小书店里见到这本《博弈游戏》,于是就买了。

    回来按习惯先草草翻了一下,里面一些有意思的故事先看了看,不求甚解,倒也都挺有意思。战争、经济、教育等等方面的例子都有,囚徒困境、大小猪争食、美女与老虎等常常在其他地方看到的例子也有。

    唯一的缺点似乎倒是这本书讲得太通俗^_^,几个概念没有讲明白。比如我仔细看了前面引入“纳什均衡”这个概念的地方,但还是有点晕。再看zhaoway当初的帖子,就更晕了,怎么下面这个博弈的均衡是左下角那个呢?

    (1,0) (3,2)
    (2,1) (4,0)

    我的理解倒是应该是有(3,2)和(4,0)这两个均衡才是。不行,再仔细看看。

    标签:


    2005年4月5日 星期二

    总算将python.cn邮件列表设成了digest模式

    python.cn
    的邮件列表(python-chinese@lists.python.cn)水贴(可能说垃圾邮件更贴切)真是多得要命,每天有好几十封邮件,有价值的
    估计只有三分之一。偏偏又离不开它,它的人气在所有python社区里面算是比较旺的,很多问题在这里有人能解答。我原来退订过,但后来还是想没事翻翻,
    又订阅了。

    偏偏网站上提供的mailman设置页面又缺少“提交"(submit)按钮(也不知道管理员哪里去了,这事反映过但总没有消
    息),没法将其设置为文摘模式。不过这个困扰我大半年的问题总算解决了:发送一封邮件到python-chinese-
    request@lists.python.cn,主题空白,内容如下:
    set authenticate password <address=xxxx> set digest mime
    address项在用其他邮件帐号发邮件更改设置时有用。

    应该mailman管理的邮件列表都有这个功能。如果不清楚具体用法,发送主题为help的邮件给foo-bar-request@some.where就可以了。



    Usage:

    set help
    Show this detailed help.

    set show [address=
    ]
    View your current option settings. If you're posting from an address
    other than your membership address, specify your membership address
    with `address=
    ' (no brackets around the email address, and no
    quotes!).

    set authenticate [address=
    ]
    To set any of your options, you must include this command first, along
    with your membership password. If you're posting from an address
    other than your membership address, specify your membership address
    with `address=
    ' (no brackets around the email address, and no
    quotes!).

    set ack on
    set ack off
    When the `ack' option is turned on, you will receive an
    acknowledgement message whenever you post a message to the list.

    set digest plain
    set digest mime
    set digest off
    When the `digest' option is turned off, you will receive postings
    immediately when they are posted. Use `set digest plain' if instead
    you want to receive postings bundled into a plain text digest
    (i.e. RFC 1153 digest). Use `set digest mime' if instead you want to
    receive postings bundled together into a MIME digest.

    set delivery on
    set delivery off
    Turn delivery on or off. This does not unsubscribe you, but instead
    tells Mailman not to deliver messages to you for now. This is useful
    if you're going on vacation. Be sure to use `set delivery on' when
    you return from vacation!

    set myposts on
    set myposts off
    Use `set myposts off' to not receive copies of messages you post to
    the list. This has no effect if you're receiving digests.

    set hide on
    set hide off
    Use `set hide on' to conceal your email address when people request
    the membership list.

    set duplicates on
    set duplicates off
    Use `set duplicates off' if you want Mailman to not send you messages
    if your address is explicitly mentioned in the To: or Cc: fields of
    the message. This can reduce the number of duplicate postings you
    will receive.

    set reminders on
    set reminders off
    Use `set reminders off' if you want to disable the monthly password
    reminder for this mailing list.

    标签: ,


    This page is powered by Blogger. Isn't yours?

    订阅 帖子 [Atom]