显示标签为“Tech”的博文。显示所有博文
显示标签为“Tech”的博文。显示所有博文

2010年3月29日

回收了henryhu.blogspot.com

从前我申请Blogger帐号的时候,发现henryhu.blogspot.com被人用掉了…… 那时候貌似去看过,但是好像打不开还是怎么的……
于是只好用easyhu了,后来开技术blog,用的henryhu9……
今天尝试了一下,去henryhu.blogspot.com,发现上面没有post,而且那个描述…… 看上去怎么那么像我写的? 加入日期是2005年,比我现在的帐号早了一年左右……
于是去Google帮助里面找,后来在登陆的地方找到有找回密码的地方,输入这个Blog之后,他说给一个163.com的邮箱发了邮件……
我去我的163邮箱一看,果然有一封邮件…… 利用里面的链接,将老的blogger帐号和我现在的Google帐号合并了……
于是终于收回了这个域名~~ 拿来干什么呢……
PS. 那个老的blogger帐号名称,叫做henryhu_sh…… 天知道怎么想到的……

2009年12月14日

通过IPv6方式访问blogspot的方法

既然GFW短期之内还不会延伸到IPv6上,而GFW对blogspot的封禁看来会一直持续下去,这里给出一个通过IPv6访问blogspot的方法: 在你已经通了IPv6的情况下,其实很简单:在上blogspot的时候,把代理设为ipv6.google.com,端口为80,协议为HTTP。 当然,总是改代理很麻烦。因此可以用各种插件来达到自动切换代理,比如我用的FoxyProxy: 装好之后,在选项里,新建代理服务器,在第二页输入ipv6.google.com和80,在第三页新增URL模板,名字随便起,URL模板写*blogspot.com*,选白名单/通配符,确定,就可以了。也可以再加一个模板,*blogger.com*。 假如大家都会用这个办法了,那原来的Live Space就可以考虑不更新了……

2009年3月29日

终于在BSD下wine出war3了

但是我们班DOTA的气氛已经大不如前了,常常叫不到人了…… 反正也很浪费时间,算了……

2009年2月9日

博客转移记(1)——关于metaWeblog接口

本来想直接用网上的博客转移服务,无奈找了好几个,比如http://blogmover.redv.com,但是这家的Blogger写入插件好像坏了…… 又如maikr,这个要注册,而且还是windows程序…… 最后只好自己写一个,就当练练Python。 首先是读取原mblogger.cn上的。这个支持metaWeblog接口,试了一下,非常好用。基于Python这种脚本语言的灵活性,对象的方法能够动态生成(估计差不多就像perl里面有个函数能处理未定义的方法调用一样……),metaWeblog的接口直接就成了Python里面对象的方法。 首先,引用xmlrpclib,这个东西现在Python自带了。 接下来 server_uri = "http://computer.mblogger.cn/henryhu/services/metablogapi.aspx" sp = xmlrpclib.ServerProxy(server_uri) 这样就搞出来一个能够帮你进行xmlrpc调用的对象了。它有.system.listMethods()方法,还有.system.methodHelp(method)方法,不但能知道有哪些方法,还有使用说明…… 这个实在是很好用…… 随后 blogs = sp.blogger.getUsersBlogs(progname, username, password) 得到一个list,里面每个对象是个dict,就是一个blog。 这个dict里面的blogid,之后就用来代表这个blog了。blogName对应的博客标题。 for post in sp.metaWeblog.getRecentPosts(blogid, username, password, POST_LIMIT): 这个是metaWeblog的方法,获取最近的POST_LIMIT个帖子。自然你希望获取全部的话,取个什么99999之类的就行了…… 这个post就是个dict,里面有title(标题),description(内容),link(帖子链接),dateCreated(写作日期),categories(分类)。 前三个都是字符串。第三个就复杂点。 返回的这个格式,应该是XMLRPC的标准格式,但是Blogger不认,Blogger认datetime对象的isoformat()返回的格式。 datetime.datetime.strptime(post['dateCreated'].value,"%Y%m%dT%H:%M:%S")+datetime.timedelta(hours=-8) 这样能够把它转换成datetime对象。之所以要后面减掉8小时,因为这里返回的是本地时间(UTC+8),而Blogger需要的是UTC时间,所以要-8。 categories是个list,每项是个字符串,就是分类。 后来搞了一天不成,第二天想着把Comments也移过来。 这个不是metaWeblog力所能及的了,只好直接抓网页了。 本来想把comment的内容提取出来用Blogger API的comment功能发上去。无奈这个comment功能目前只能用自己的帐号发comment,这个看上去就很不好看。后来想想,干脆直接把网页的评论部分处理一下,附在内容后面,还能保存原有风格,以及发送时间、发送人信息等。 httpold = urllib2.urlopen(post['link']).read() 这样先把网页抓下来。 草稿也是返回的,而草稿会抓来一个错误网页。另一方面,在抓下来的网页中发现错误,我就认为这个是草稿——虽然这个像dirty hack,但是也能用用~ commentpart = comm_exp.search(httpold).groups()[0] newcommentpart = comm_re2.subn("",commentpart) 其中 comm_exp = re.compile("(
[\d\D]*
)\s*<div id=\"commentform\">
") comm_re2 = re.compile("(&lt;a id=\"_ctl\d+__ctl\d+_CommentList__ctl\d*_EditLink.*</a&rt;)")#(.*)</a>\r\n</h4>
\s*

\s*(.*)

2009年1月30日

技术blog搬家完成

今天把程序完善了一下,然后重新运行。
在碰见blogger的发布限制之前,我先遇到了程序Bug……
今天往程序里面加了转移评论的功能,这个bug就是出在这个地方。有的blog是草稿,然后程序访问的时候,返回的是访问被拒绝。程序在这个页面里面找评论,于是挂了……
改了之后,重新运行,碰见了blogger的发布限制……
原打算明天再说,但是Roy的话给了我启发。
虽然单个blog有限制,但是能够开多个blog,然后把那些blog导出,再导入技术blog。
这样就解决了问题,使得整个搬家工作能够在一天内做完。
现在看起来,Blogger的限制大约是每天50贴,还算合理。但是那些搬家程序不知道是怎么混的~
另外,总结经验,以后要先尝试运行一遍,再将改动予以实行……

2009年1月29日

技术blog搬家

其实我有一个技术blog,但是没什么人去……
原来架在mblogger.cn上,但是这个地方越来越缺乏管理,用户流失严重,就是懒得搬。
话说这个也是我一开始写的blog。
这个地方基于.Text平台,提供metaWeblog接口。我打算搬到blogger。
在网上找了一下,有现成的博客搬家的地方。但是试了一下,都不能用……
比如说,http://blogmover.redv.com/,这个地方能够读出原来的blog,但是写到blogger的模块出问题了……
又如maikr,需要登录才能用,而网站挂了,于是注册不了……
最后只好自己写一个搬家程序了……
既然近期学习python,那么练一下也好。python自带xmlrpclib模块,能够和metaWeblog通讯。
尝试了一下,metaWeblog的接口还真好用,不一会儿就能够读出blog了。
话说python生产力就是高阿,随便弄一下就好了,有什么问题搜一下也能很快解决。如果…… 如果python不是用空格/缩进表示层次的话,那就更好了!
然后去研究写到blogger的方法。
这时候我发现,虽然metaWeblog基于blogger API,但是那是老的blogger API……
新的Blogger被Google整合到了GData API框架里面,于是巨麻烦无比……
Google的人们是不是太聪明了…… 总是觉得自己发明的东西比较好,不用现成的…… 然后弄出麻烦的东西,光了解就要不少时间……
还好有python的gdata库,自带了访问blogger服务的样例。
但是又有一个问题:貌似Blogger的GData访问方法被GFW掉了……
只好改了,用SSL,又耗掉一堆时间……
最后,折腾了一大堆,终于是把这个搬家程序写出来了……
但是,最后用的时候碰见问题了:

status 400
Blog has exceeded rate limit or otherwise requires word verification
for new posts

COW! 这可怎么搬家啊……

2008年12月22日

Sogou 的浏览器(2)

刚才又搜了一下,然后搜修改HTTP头的时候,有人提到privoxy。
对啊,privoxy不是可以乱改HTTP头的么。
所以,这样配置privoxy就可以了:
首先,建立user.filter,内容:

CLIENT-HEADER-FILTER: change-host-to-intel Change the Host to Intel!
s/Host:.*/Host: www\.intel\.com/

随后,建立sogou.action,内容:

{+add-header{X-Sogou-Auth:
4D929DA9BB4DF2966799B7761245A98B/55/bad36d282a55d332}}
.*
{+add-header{X-Sogou-Domain: 24181F5B2C160409035C061D3E}}
.*
{+add-header{X-Sogou-Timestamp: 494f30c4}}
.*
{+add-header{X-Sogou-Tag: 5bccdce35ecd20cab326fb0b746cce7b}}
.*
{+client-header-filter{change-host-to-intel}}
.*

最后,在privoxy配置文件里面加上:

actionsfile sogou.action
filterfile user.filter
forward / 118.228.148.27:80

之后,把 firefox 的代理设为 privoxy ,over!
经验证,这样可以上IBM,Adobe等,应该是没问题了。
这样就的确可以在 firefox 里面上了~
接下来要考虑修改user-agent了~ PS: 修改user-agent: 在action文件里面加上: +hide-user-agent {Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)} 就可以了……

Sogou 的浏览器

上次说到的 Sogou 浏览器终于公开了,搜狗浏览器 1.0 beta。
还是测试版,的确能够在教育网上外国网站。
但是这个东西是ie内核的,我这里不能用。所以只好研究一下。
先用 tcpdump 看一眼,发现是和118.228.148.27~30的几个服务器的80端口通信,于是怀疑这个东西用了个http代理。
然后用 wireshark 抓下来,果然是代理。用nmap知道,那个代理是个linux,跑着squid。
找了个包头,然后一行一行删掉,剩下不能删的:

GET http://www.intel.com/ HTTP/1.1
Host: www.intel.com
X-Sogou-Auth: 4D929DA9BB4DF2966799B7761245A98B/55/bad36d282a55d332
X-Sogou-Domain: 24181F5B2C160409035C061D3E
X-Sogou-ResponseCode: 200
X-Sogou-Tag: 5bccdce35ecd20cab326fb0b746cce7b
X-Sogou-Timestamp: 494f30c4

把第一行的GET后面的地址替换成随便什么地方,貌似都行~ 也就是说,想去哪里就去哪里。
改了 GET 后面的值,然后用 nc,验证通过。
sogou 的弱的地方,在于只检查了 Host 后面的域,目前怀疑 X-Sogou-Domain 是 Host 后面的值的某种散列。
但是 squid 依靠 GET 后面的地址确定目标地址,而且不要求和Host一致…… 这样 sogou 的检查就等于白干。
实际到firefox里面,装个 Live HTTP Headers,然后把除了 GET 之外的东西复制到点
Replay...出来的那个框里面,然后点 Replay,并且指定118.228.148.27之类的作为代理,就能够获取网页内容~
有了这样的信息,开发一个能够直接利用那个代理的浏览器应该也很容易了,只要在每个请求后面加上那堆东西就可以了……
我怀疑一个脚本就能搞定……
另外,那个 squid 好像不care cookie一类的东西,本来 intel.com 就是有 cookie 的,删了也没有关系~
所以说,sogou 太弱了……
还有,那个包是虚拟机里的xp下抓的,所以应该看不出 IP 吧~

2008年12月16日

SunBird试用

因为容易忘记事情,所以需要一个提醒你在什么时候应该干什么事情的工具。
从前用KDE4,然后用着Korganizer。虽然有各种各样的bug,而且速度不快,但是既然用着KDE,顺便也就用这个。
现在不用KDE了,但是还是要因为这个启动一堆KDE的东西,很浪费。然后就考虑替代品。我对Evolution没什么好印象,想起Mozilla有个什么bird的,然后搜了一下,叫
SunBird ,于是装上试试看。
最新的是0.9,然后 BSD ports 里面只有0.7。下了个预编译的,还会crash,上网发现 PR 里面已经有 0.9 的 patch
了,下了装上。貌似启动速度挺快的,资源占用方面没什么感觉。
看上去,SunBird 比 Korganizer 简洁,界面可定制性也比 Korganizer 好。添加事件的时候,界面很简单,但是我平时用到的功能都有了。
据说 SunBird 有 Korganizer 没有的远程发布功能,反正我也用不上。
详细的评价可以看看这个: Switching to Sunbird from KOrganizer: A comparative review
总的来说,SunBird 还是挺不错的。至于不能最小化到系统托盘的问题,目前用 AllTray 这个小工具就解决了。

2008年12月15日

桌面系统

平时,桌面系统有哪些东西是的确需要的?
1. 一个窗口管理器。没有窗口管理器,不能切换窗口,最大最小不能,连标题栏都没了……(窗口管理器和装饰器其实是分开的,但是一般都用一套的吧……)自然不行。
2. Notification Area(就是系统右下角显示很多小图标的地方) 本来想把这个东西叫system
tray,但是看见MSDN有一篇文章说这个是错误的叫法。但是我觉得好像人人都那么叫…… 大家都听得懂不就行了么。
没有Notification Area,各种喜欢缩在托盘里的程序就不行了……
3. 程序启动器 这个其实是可选的,也就是点一下运行一个程序那种图标。没有这个,有些路径复杂的程序就麻烦了……
4. 桌面小工具 这个也可选,但是屏幕上有个地方显示时钟也是不错的,不用扭头看时间了…… 顺便还能看个CPU占用率什么的。
5. 注销/关机/重启按钮 我知道可以用命令解决问题,但是点一下解决问题不更方便么……
所以说,其实桌面系统提供的很多功能并没有什么用处,比如说,我觉得桌面上的东西我几个月就没怎么碰过……
因此可以抛弃 KDE 和 GNOME,搞一个简单,干净,漂亮的桌面环境~
具体情况,过一会儿再写…… 现在基本上已经搞出来一个了,感觉性上比KDE4也不差~

2008年8月1日

linux QQ 试用

腾讯出了个 linux QQ,不管是出于支持国产,还是出于争取用户,反正终于有官方版的了。
为了这个能够在BSD上跑,我还更新了一堆包。BSD 上 port 里有的 linux 包都太老了,gtk还是2.6的,QQ没办法用,说有没定义的东西。我说你QQ怎么就不搞一个静态编译的……
然后更新了 gtk 和 glib,为此更新了 pango,然后是 cairo,然后装了 pcre, xcb, pixman... 搞了半天终于跑起来了。
总的来说,功能很弱,腾讯那个网页宣扬的功能,也就是全部功能了。图片能收不能发,文件不能传,群只能聊天无法管理,没有声音提示(这个最BT! 别人发给我消息我不知道……)
然后不支持只显示在线用户,连把好友换个分组都不行……
说起来还是 preview 版,所以不能期望太高。毕竟到目前为止还没有 crash 过,这个就比我 wine 出来的 QQ2008 就好多了……
官方出了QQ,总也不是什么坏事。反正不管谁出的,谁的稳定,谁的好用,就用么…… 毕竟服务是腾讯提供的啊……
哪天谁像ubuntu老总那样NB了,钱多了开个公司,运行一个聊天服务器,发布开源的聊天软件,倒是很不错~  现在比较有希望的大概也就是 google 了。

2008年7月28日

小试Gtk/Glade:gtunet

从前看见有的程序用到glade,看了一下,发现是靠xml文件来描述程序界面的方法,当时就觉得不错。
这两天看着学校的tunet越来越不爽,linux/BSD下只有命令行版本。虽然有个叫qtunet的,但是貌似从来没人更新,界面巨烂,功能也很有问题。于是想到在tunet的基础上,做个GUI。
结果就动手写起gtunet。正好试试gtk编程,和glade这个工具。
试下来glade真的非常方便,弄完界面,和函数挂钩,相当于原来的一个一个控件建出来再signal connect,省力许多。所谓"界面和程序逻辑分离",这个是第一步吧。
其实写了一半的时候,觉得用PyGTK或者其他脚本语言来写,或许更方便。毕竟要和一个命令行的程序对话,用C来写并不是很方便。而且,有什么问题,改一下就可以看见结果。但是,我一直对PyGTK之类的东西没有好感,本来Gtk并不大,却要装一大堆的binding。
后来写到一半,发现大概还非得用C不可。tunet其实有个地方比较ws,它为了不让密码显示在控制台,是直接打开/dev/tty,然后可能靠ioctl来禁止回显。既然没有用stdin,我本来用popen打开的方法也不能输入密码。然后我也只好打开/dev/tty,然后用TIOCSTI这个ioctl来模拟键盘输入了。如果用脚本的话,这个估计就麻烦了……
今天添加了一个线程,把获取程序输出并显示的部分扔到了一个线程里。然后麻烦的事情就出现了…… 我还想让记录自动滚动,然后写了一些东西,结果运行的时候,冒出来各种各样的错误…… 简直就是每次的错误都不一样…… 我的线程是用pthread建的,后来觉得问题就出在这个上面,改成了gtk自己的thread库。现在好像稳定了不少,但有时候还是会有问题……
tunet很NB,我killall掉tunet的话,连我gtunet这个父进程也会收到一个SIGTERM…… 太NB了……
现在,大致这个东西勉强能够用了,不过还有很多能够改进的地方~
其实,貌似Gtk用类绑定之后,用起来会方便不少。但是,貌似用gtkmm这个库(C++绑定的Gtk)的程序很少,如果用了,还要额外装…… 算了吧。

2008年7月15日

巨麻烦的fonts.conf

从前暑假的时候,为了某些事情去搞fonts.conf,搞了半天才有一点头绪……
上次,为了让firefox不对小的宋体进行反锯齿,又捣鼓了好几天。后来发现,firefox匹配的字体名字有时候是simsun,有时候是宋体……
今天,为了让粗体的宋体英文字母进行反锯齿,又去改.fonts.conf,结果又是半天……
明明在配置文件里面写得好好的,只要weight属性超过普通就反锯齿。但是,就是没有效果。如果提高判断标准,就会全都反锯齿或者全都不反锯齿……
我知道,宋体在这里原来只有普通字体,粗体是人工生成的。但是,我没有料到那个是在我的配置文件处理之后再被处理的…… 看本地的字体配置,用户的字体配置文件处理编号50,从普通字体生成粗体编号90……
最后搞了个不怎么好的解决方法,让用户的字体配置文件变为编号95…… 问题的确是解决了。难道设计人员没有想过有可能需要在所有自动替换处理操作结束之后,允许用户有自由修改的权力?

2007年11月28日

FTPlink

昨天入手一根貌似HL203的连接线,只要10元(HL203那里是15元,超市50元……)。今天用Hotlink一试,果然可以用,看来这年头还用串口的东西不多,另一头是2.5mm耳机接头的东西大概仅此一家了……
试了一下FTPlink,的确快很多,大约为原来的3倍,10KBps左右。还有一个极速FTPlink,应该可以到921600bps~115.2KBps,但是现在没有支持高速串口驱动的主板可用,我又没有USB线。估计Philips的连接线改造一下也可以,但不清楚怎么弄。
好久没有关心,现在连TC1000S上的NC-TOOLS都基本上功能齐全了,还有SYSTOOLS…… 估计10KBps的速度也够用了。
入手了Walter Rudin 的 Principles of Mathematical Analysis原版,阅读中…… 看书还是原版好……

2007年10月12日

Transcend miniSD 送修小记

昨天下午,正好有两个小时空闲,出去送修miniSD卡。
这张卡大概今年上半年买的,在五角场,好像是ego。上周坏了,2G的卡变成了1.41G,而且拷进去的东西读出来会有问题,比如一首歌听了一半突然变成了另一首……
此前去网上溜达,看见了创见(Transcend)的北京代理处的电话。联系了一下,说让我送到万泉河路68号紫金大厦1206…… 一查地图,万泉河路倒是不远,北大西南角就是。但是这条路很长,如果在南端就麻烦了……
反正现在有了自行车,也不怕。从学校出去,往西横穿北大,从一个天桥出了北大,顺着芙蓉北路,到了万泉河路。北京很多房子都不标注路牌号,一个路牌都看不见,连哪边单双哪边大都不知道。我看着比较有希望的方向,骑了过去。
骑了一路,来到一个交叉口。我也弄不清楚,就顺着路骑。骑过交叉口,发现路名变成了北四环西路,知道跑错路了……
在交叉口又绕了好几下,终于发现了万泉河路。其实在交叉口乱骑是挺危险的,但是北京的堵车状况非常严重,下午四点不到就很堵,何况是交叉口,因此绕也不麻烦。
又骑了不少路,看见终于有一些门面房了,找了个政府单位模样的,门卫还挺热情。问他哪里是68号,他不知道。问这里是几号,他说"应该是59号"…… 接着骑,看见56号,这条马路的单双是在一侧的……… 还是随便的…… 再过一段,看见了58号,真是莫名……
再往前到了一个路口,发现旁边有个高校的校门,貌似是挺大的学校。正巧路边有个电子查询亭,进去查了之后,发现再往前一段就是了。其实紫金大厦在万泉河路的尽头,再下去就是苏州街了。骑过一段,赫然见到了紫金大厦,只是在马路对面…… 只好再往前几百米,从路口绕到对面。
停好车,到12楼。右面就是创见资讯,里面都是办公楼一样的隔开的写字台。服务台人员让某隔间的人员接待我,那个人用创见的读卡器看了一下,说免费维修,三周之后来,留了手机号,说电话联系,还给了一张收条。但是miniSD转SD的Adapter不给免费维修,这个……
下来取车,三毛停车费…… 回来熟悉了路程,一路高速,16:32到17:00到达西门,中间经过两次红绿灯,所以实际上大概是25分钟。路上注意了一下,发现那所高校某大楼上有校徽,原来是人大…… 发现人大的校徽的图案很有趣……
回来看地图,发现其实不用到万泉河路,到苏州街一路往南就可以了,绕了个圈子…… 主要是原来猜测在北面这一头的,结果在南面。应该先看看Google地图再去啊……
总的来说,创见要顾客跑到那里亲自送修还是挺麻烦的,不过不需要报修单据,不管购买地点,都可以送修,而且免费,这点还是很不错的。本来我担心修不了了……
估计这种卡也是修不了的,总共比指甲盖不大多少…… 估计也只能换一张了,只是不知道为什么要三周。
另外,这点路骑下来,这天基本上不想骑车了…… 骑得太爽了…………

2006年10月12日

Inside C#

这段时间有了一些空闲,先看了一段时间关于8086汇编和6502汇编的东西,后来在看《Inside C#》(学校的图书馆真不错~ 这个都有~) 看了之后,觉得C#用着很顺手,彻底的面向对象使很多东西变得简单了。现在对于C#的熟练程度估计已经超过C++了…… 昨天帮老师用C++写USACO的题目,结果被快排整了半天——先是==和=的事情,整个程序就一个地方搞混了,结果就混乱了…… 还有全局和局部变量的事情,C++定义变量太顺手了,结果一个变量全局和局部各定义了一次,出了些奇怪的事情…… 再加上VC6似乎和Standard C++不符(using namespace std会出错…… #include 竟然是#include ……),Dev-C++的调试太垃圾了,结果是连个顺手的C++环境都没有…… C#的一个很有意思的东西是foreach,从前用VB的时候这个没有好好学过,现在发现它也简化了不少操作——什么循环变量和对象数量都不用考虑了,随便一混就可以了~ 关于接口和继承,C++的情况我不清楚,C#里面的接口大概是参考了COM,反正是个定义明确,使用方便的东西。但是,关于从父类继承的函数变成了实现接口的函数这种混乱的事情…… 估计发生的机会也不大吧…… 终于在Pascal之后,系统地学习了另一门语言~ 《Inside C#》 的确是一本好书~ 把东西讲得足够清楚。 从前就听说过Inside系列不错,的确是这样~ C#里面还有很多东西,需要从实践里面才能够知道,努力学习吧~