存档

作者存档

补:昨日骑车路线

2007年11月26日 2 条评论

补一下昨天的骑车出游路线。

本来百家湖应该是上周去的,但是由于天气原因推迟到了这周。看起来这种短途而且市内路线远多于长途的出游放在天气如此好的周末简直是浪费。昨天的天气好到令人咂舌:气温21度,湿度40%,风力<4级。

所以从百家湖回来的时候,感觉不够过瘾,便取道水西门大街去了滨江大道——没车又路宽的地方,以速度27-28骑了一圈半(18公里),踏频(每分钟踏多少圈脚蹬)一直在90左右,爽是爽了,不过还真累。尤其是发现,这种速度下面领骑和跟骑真的是截然不同的感觉,空气阻力还真是大。

顺便show一下刚刚装上的SIGMA 1606码表,带里程数和踏频。

 

根据码表显示,本次总里程69公里,耗时4小时5分钟,因为50%以上的路程在红灯遍布的南京市内,而且在百家湖附近以10的速度在晃,回来途中遇到洒水车,不敢上速度,平均下来时速反而只有15,汗。

在市内骑的另一个严重问题就是捏刹车捏得虎口生疼。下次还是要选一个长途的,并且以郊外为主的路线。

OK,show路线:

标签: , ,

无聊的周末

2007年11月17日 4 条评论

大体上做了如下的事情:

—-
成功把Windows存储在本地证书库当中的证书导出成openssl的-CAfile所接受的PEM格式,最近一直在研究这个,关于CryptoAPI和Openssl的互操作性问题。这个可以将来写个专题来说一下,如果我不是那么懒的话。

—-
看到水木社区上面某闲人的问题:char ************************* p;这样的定义语句中,vc最多支持多少’*’?

试了一下在我的计算机上面VC2005的结果,与水木上面网友给出的结果差异很大,只到510就挂掉了。


#! /usr/bin/perl -w
use strict;

my $i=1;
while(1) {
   open SRC, ">src$i.c" or die;
   print SRC "#include <stdio.h>\n";
   print SRC "char ".(‘*’x$i)."p=NULL;\n";
   print SRC "int main(){printf(\"%p\", p);}\n";
   close SRC;
  
   print "$i\r";

   my $output = `cl -nologo -c src$i.c`;
   if ( $output =~ /error/ ) {
        print $output;
        last;
   }

   unlink("src$i.c");
   unlink("src$i.obj");
   unlink("src$i.exe");
  
   $i++;
}

print "\nmax: ", $i-1, "\n";

结果:

src511.c
src511.c(2) : fatal error C1026: parser stack overflow, program too complex

max: 510

怂恿某Linux fans尝试gcc,导致其在1600左右死机。

—–
无聊翻看wikipedia上面关于动漫的条目,发现与Lucky Star相关的众多有趣事实,列出两个:

作者美水かがみ为男性,虽然此人的笔名和剧中女角之一同名,而且画风细腻,但确实是男性。

剧中泉此方的母亲泉彼方的配音是岛本须美,是为GHIBLI众多影片配音的奶奶级别的人物,作为GHIBLI的fans当时看的时候竟然没有听出来,罪过罪过。比较著名的配音包括《风之谷》(1984年)中的娜乌西卡,《龙猫》(1988年)中的主角姐妹的母亲,《幽灵公主》(1997年)当中的阿时(Toki),《名侦探柯南》当中的工藤有希子(柯南的老妈)。

—–
最后折腾众多的FireFox插件,发现FoxyTunes可以插入这种东西:

—————-
Now playing: Joe Hisaishi – [Castle in the Sky #11] Stones Glowing in the Darkness
via FoxyTunes   

—–
好吧,我承认这个周末我很无聊,而且我很宅。

标签:

光棍节,爱车首航式

2007年11月11日 3 条评论

一直考虑要买辆自行车骑着出去转转,但是自从去年十一上一辆车被偷之后,就一直没有再买过。近期在某同好的怂恿下,购入爱车一辆,入门级公路车,黑色,10kg,骑着感觉还可以。

今天上午拿到的车,决定下午去试车。既然是公路车自然距离不能太近,但是太远显然已经超出了一个下午所能骑行的距离。时下当值深秋,传说中南京名景之“春牛首秋栖霞”,说的就是栖霞山这个时候正有红叶可看。于是察看地图,发现是个不错的目标地:距离南京市区约20公里,距离正佳;在312国道附近,路况不错。加之下午天气不错,艳阳高照,气温大约16-18度的样子,适合出行。

于是下午两点半近三点出发,取道板仓街和花园路,避开城东干道,上宁镇公路,至312国道,在栖霞山转了一圈,没有进景区(30块门票,有点小贵,南京的景区为什么都这么贵呢),在栖霞寺门口照了几张到此一游照,原路返回。往返共50公里(包括市内),路线我在Google地球上面标了条路径,自己感受一下(点击可以看大图)。

去的路上正好顶风,加之宁镇公路都是上坡下坡,虽然坡度不大但是还有点小累,幸亏有足球带来的体能储备,所以在国道上面的速度大约保持在20-25km/h(我与该同好皆是新手,不要拿大牛们的35km/h的平均时速打击我们)。这个时候公路车的优势显露无遗:轻便、变速装置、以及骑行姿势都大大的减少了体力消耗。而且相应的,回来的途中骑顺风车,时速始终25+,一度达到37-38,宁镇公路那一段用了不到半个小时就骑完了,还是很爽的。

照的几张巨挫无比的照片,放在Picasa相册上面,没什么东西,只是一张风景和一张到此一游。到此一游照还没有照出来我的车……

我的picasa相册地址,知道我的GMail的推导一下应该就知道了,所以就不贴链接了,以免搜索引擎跟踪。

标签: , ,

ISO C语言标准的更新

2007年11月8日 3 条评论

部分翻译自 ISO C Standard Update

作者Arjun Bijanki是Visual C++编译器的test lead,而且是Microsoft在C标准委员会的代表。

C1x (0<=x<=9)将是下一个版本的C语言标准,ISO国际标准化委员会WG14,C Programming Language刚刚结束了在夏威夷的又一次半年会议,在会上委员会成员讨论了下一版本的C语言,非官方称为C1x的未来发展,参见这里。

对C程序员来说,整部文档都值得一看,但是希望在C1x当中的新的概念引起大家的注意:

12. Trust the programmer, as a goal, is outdated in respect to the security and safety programming communities. While it should not be totally disregarded as a facet of the spirit of C, the C1X version of the C Standard should take into account that programmers need the ability to check their work.
12. 信任程序员,从安全的编程角度上来说已经过时了。虽然说作为C的精神的一个重要方面这个原则并不应该被完全否定,但是C1x有责任给程序员一个检查自己工作的机会。

13. Unlike for C9X, the consensus at the London meeting was that there should be no invention, without exception. Only those features that have a history and are in common use by a commercial implementation should be considered. Also there must be care to standardize these features in a way that would make the Standard and the commercial implementation compatible.
13. 不像C9x,伦敦会议的一致意见是(在C1x当中)完全不应该有任何的新发明。只有经过历史考验和在商业实现当中得到广泛应用的特性才会被考虑。而且在标准化的时候需要注意和商业实现的兼容。

14. Migration of an existing code base is an issue. The ability to mix and match C89, C99, and C1X based code is a feature that should be considered for each proposal.
14. 对已有代码的升级是一个考虑方面。每一个提案都应该具有将基于C89, C99和C1X的代码整合的能力。

代码升级是毋庸置疑的重要 – 我甚至认为这是基本的需求。但是我发现另外两项更有意思。第12条反映了工业界在近10年来对于安全性方面的持续关注,委员会开始拥抱这个设想是非常伟大的。因此委员会在 TR 24731 (边界检查接口,包括了在VS 2005当中大多数_s系列的函数)上面的努力也就也不让人意外了。

委员会也要求编译器厂商提供它们被最广泛应用的语言扩展以便委员会考虑。在众多实现(例如Visual C++ 和 GCC)当中共享的很多特性,像扩展属性(extended attributes)和线程局部存储(thread local storage),将被重点考察。还有一些情况,实现之前语法可能有区别,但是底层的概念是一致的。正如 #13所说,委员会会尽力去对他们保持兼容。

对于微软为什么没有在Visual C++当中完整的实现C99,Arjun Bijanki的解释是实现哪些功能是基于用户提出的需求的。根据用户的需求,Visual C++已经实现了可变长参数宏(variadic macros),long long类型,__pragma, __FUNCTION__, 和__restrict。他希望能够听到更多来自C语言用户的需求,而且许诺会在明年4月份的下一次会议后给出关于C标准更进一步的更新。

标签: ,

解决在Firefox下面Live Space“发布日志”按钮被禁用的问题

2007年11月7日 18 条评论

也许你发现了上面的帖子。
这个帖子是我在进行测试,看看能不能启用Live Space的“发布日志”按钮。
事实上是成功了,特将其分享给大家。

首先,你需要安装Firefox扩展 greasemonkey。这个扩展可以使你在加载一个页面的时候执行一段你自己的Javascript程序。

安装之后,将下面的程序拷贝到一个文本文件,并把扩展名改成 .user.js。(务必是.user.js,否则greasemonkey无法自动安装之)。

===脚本开始,拷贝时请不要包含这一行===
// ==UserScript==
// @name           Enable Live Space Post Button
// @namespace      http://ftofficer.spaces.live.com
// @description    Enable Live Space Post Button
// @include        http://*.spaces.live.com/*
// ==/UserScript==

function LiveSpace_enableButton(id) {
  var button = document.getElementById(id);
  if ( button ) {
    var cls = button.getAttribute("class");
    var clsNameEnd = cls.indexOf("spDisabled");
    if ( clsNameEnd != -1 ) {
      clsNameEnd–;   // skip " " before spDisabled
      var newCls = cls.substring(0, clsNameEnd);
     
      button.setAttribute("class", newCls);
      button.setAttribute("mi:state", "enabled");

      var aNode = document.createElement("a");
      aNode.id = id;
      aNode.href = "#";
    }
  }
}

LiveSpace_enableButton("actionToolbarBlogPost");
LiveSpace_enableButton("actionToolbarSave");

===脚本结束,拷贝时请不要包含这一行===

然后将这个js文件拖放到Firefox窗口中,greasemonkey会弹出对话框询问是否安装,选择是,即可完成安装。

然后,去Live Space的“添加日志”当中看看吧。

如果看到“发布日志”和“保存为草稿”仍然没有启用的话,请看看greasemonkey当中配置的网直通配符是不是和你的网址一致,自己改改看看。在不行可以在这里回复。

测试

2007年11月7日 没有评论

测试看看是不是“发布日志”已经启用了。

Google Android: Google的手机操作系统

2007年11月7日 没有评论

今天news.com技术博客上面最火的话题是什么?是两个名词:Google和Android。

Google to unveil ‘Android’ phone software

Google is ready to unveil a suite of software for mobile
phones based on open-source technology, backed by some of the largest
wireless industry companies in the world.

The company is expected to hold a press conference on Monday to unveil
the project, which is expected to incorporate software from the Linux
world into a mobile platform code-named Android that’s designed to run
on phones, according to sources familiar with Google’s plans. A
software development kit for what’s being called "a complete
mobile-phone software stack" is believed to be in the works and will be
released relatively soon thereafter, the sources said. It’s not exactly
clear what kind of software will come as part of that stack, but it’s
said to include everything you need to run a phone.

等到沸沸扬扬的GPhone流言过去,Google高调推出了其手机平台,代码名为Android。这将是一个基于Linux的手机平台。而根据Google黑板报的消息,
看来GPhone将是一个虚幻之物了,取而代之的是Google的手机操作系统。

过几天SDK即将可用,持续关注一下。

我们是不是在逃避成长?

2007年11月4日 7 条评论

我们是不是在逃避成长?

突然有了这么一种感慨。
也许是看到了朋友blog上面又一篇怀旧的帖子。

怀旧似乎是我和周围的很多朋友的一大特点了,也许在更广泛的范围内也是这样。
去网上搜索一下“80后”或者类似的字眼,很多都是在怀念幼时的玩具、游戏、甚至电视节目。
前些日子变形金刚的热播,估计也有类似的原因。
而我收藏的哆啦A梦的动画片和漫画也一直很受欢迎,也应该有这方面的原因吧。

怀旧本身也许不是什么错误,但是怀旧是一种对未来缺乏信心的表现,甚至可以看成是一种对现实的逃避。
久而久之,逃避现实也就变成了逃避成长。
我们总是在想着The Old Good Days,反而忘记了向前看。
而我们总是想着自己是个孩子该多好,反而也会忘记了作为一个成年人应该具有的责任。

诚然,活生生的世界观和现实的矛盾,就是在我们眼前上演。
我们上小学的时候,大学是不收钱的;我们上大学的时候,小学是不收钱的;
我们没钱赚的时候,房子是不用买的;我们有钱赚的时候,房子是买不起的;
我们从小就被灌输对万恶资本主义的批判,长大了却发现自己就处在万恶资本主义当中;
我们从小就被教育要遵纪守法,脚踏实地,长大了却遵纪守法的受气,投机倒把的发财;
如此种种。
在这种环境下长大的我们,心中的压力可想而知。

而在这种压力下面,越来越多的人就开始选择逃避。
怀念无忧无虑的童年,也就是怀旧,也就成为一种不错的逃避方法;
而有的人也许就走上的其他的路,比如沉迷网游;
好一点的沉迷技术,沦为技术青年;
或者沉迷文学,成为文学青年。

但是逃避能解决问题么?人不能不成长。
总是逃避,最终会离现实越来越远。
关键还是要有哪怕伤痕累累,也要抬着头向前冲的精神。
既然世界和我们所知道的东西已经不一样了,我们就来改变我们所知道的东西吧。

从今天起,正视生活。

标签:

都是Intel无线网卡驱动惹得祸

2007年10月27日 2 条评论

连续一段时间在公司使用无线网络上网,一直非常不爽的就是其不稳定——非常不稳定,时断时续。后来仔细研究之后发现,每次经过十几分钟,无线网卡的指示灯就灭掉了,紧接着就是无线网络断掉。过了几秒钟,无线网卡指示灯重新亮起,然后无线网络重新连接——就这样,无限网络不断的通断。

既然已经发现了问题的症结,接下来就是看看为什么会造成这种情况。我的无线网卡是ipw2200 (Intel PRO/Wireless 2200BG),应该是非常常见和通用的一款无线网卡,至少在Linux下面一直以来驱动不成问题。但是看了一下驱动程序里面的选项,发现驱动程序的时间比较久远了,所以首先还是来更新一下驱动程序吧。

于是到Google上搜索,顺利的找到了Intel的驱动官方站点。从上面的列表当中看,有两个版本的驱动程序可供选择:11.1.1.11/9.0.4.36 版本的Driver Only包,和11.1.1.0 版本的Network Connection Software。我一直觉得硬件这个东西还是有个硬件厂商提供的软件来协助管理比较好,于是没有多想,就把两个都下载了下来。之后运行安装Network Connection Software,安装过程当中笔记本的喇叭(喇叭,不是音箱)突然连续响了N声,直觉告诉我有点问题,但是也没多考虑,安装完毕之后就重新启动了。

不想重新启动之后,先是登录界面上面输入账户密码之后,登录界面好像死掉了一样,等待了大约两分钟才启动到桌面,而且登录进去之后也马上发现不对劲:任务栏上面的快速启动无法显示。虽然之前也出现过类似的问题,但是都是把快速启动删除然后再重新添加就好了。但这次直接报错:无法添加工具栏。

当然我知道,任务栏当中的图标是一组快捷方式,存放在C:\Documents and Settings\<Your User Name>\Application Data\Internet Exploerer\Quick Lunch下面。于是转过去找,竟然发现Application Data下面根本没有Internet Explorer的目录!再试图打开FireFox,竟然直接跳出首次运行的配置导入向导——一切迹象都表明:Application Data目录失踪了!

幸好我知道sysinternal有一个工具叫做Junction,用来建立目录软链接。所谓的目录软链接好像快捷方式一样,可以让你从一个位置指向另一个位置。但是目录软链接对于上面的应用程序是透明的,只要软链接已经建立好了,比如把C:\test重定向到D:\test,在应用程序看来这两个目录就是完全一样的了,对于C:\test下面的文件访问,也都会被操作系统直接重定向到D:\test下面的相应文件。

幸好我知道这个东西,而且是之前就知道。当年当我发现你根本无法阻止很多程序往我狭窄的C盘上写文件的时候,我就不得不想办法把尽可能多的东西迁移到别的盘上去。最早被我看上的就是Documents and Settings下面的目录:无数的程序把配置文件放在这里(也应该放在这里)。所以我就用软链接把C:\Documents and Settings\<My user name>\Application Data目录重定向到了另一个磁盘分区上,顺便一起被重定向的还有几个同级的目录。这种解决方案的一个坏处就是,如果某个软件作了什么不该做的事情,删掉这个软链接如同删掉一个空目录一样简单:一个RemoveDirectory的系统API调用足以。

那么是不是谁把这个软链接给删掉了呢?用资源管理器是没有办法区分的,但是用命令提示符可以。所以我立即用命令行转到这个目录去看,果然, Application Data已经变成了<DIR>,而不是软链接(<JUNCTION>)了(可惜这里忘记截图留下现场了)。

那么实际的目录内容呢?我立即转到软链接指向的目录观察,万幸的事情:所有的配置文件都还在。

接下来的事情就很简单了,换用另外一个账户登录,使用命令提示符移动到C:\Documents and Settings\<my user name>下面,删除原来的Application Data目录,然后执行junction "Application Data" "E:\path\to\Application Data",建立了一个新的目录软链接。

重新用自己的账户登录,所有的配置文件都回来了,打开FireFox看到布满插件的状态栏,放心许多。

回顾一下我之前作过的事情,只能让我相信,确实是Intel的安装程序把这个目录删掉了:计算机喇叭的响声也许就是因为有程序发现自己的 Application Data目录被删掉了。而当时在做的事情,就是在安装Intel的应用程序而已。

一个问题已经解决了,但是还有另外一个问题:登录仍然非常的慢,为什么呢?

你看到的登录界面其实是叫做WinLogon的进程所显示的。而这个WinLogon当中是可以加入许多的自定义模块的。但是这些模块分布在各处,查找起来非常不便。幸运的是sysinternal仍然有一个工具替我们做了这些事情:Autoruns。这个工具运行之后,会有一个WinLogon标签页,当中显示了所有WinLogon注册的组件。请注意图中用红线圈出的部分,这些就是Intel安插在 WinLogon当中的。而登录的时候,WinLogon使用GINA DLL来进行身份认证。从图中显然可以看出,Intel的无线网卡程序使用它自己的GINA DLL替换掉了Windows自己的GINA DLL。

那么Windows自己的GINA DLL是什么呢?我们在system32目录下面运行dir *GINA.DLL,得到一个列表,如图中右下角所示。从名字上面看,msgina.dll应该就是微软的GINA DLL了。所以在IWPDGINA上面双击,Autoruns自动打开注册表编辑器,并定位到该注册表项。将它改成msgina.dll。然后把剩下的两个和Intel相关的项目前面的勾去掉。之后重启系统,输入密码之后,登录立即完成,并且很快的看到桌面,一切恢复正常。

而这个时候回头看看我最初想要做的事情:我的无线网卡的驱动正确更新了:

更新之后的无线网卡驱动确实提高了电源管理的能力:在我写这篇文章的整个1个小时当中,无线网络没有再断。

但是,仅仅是一个无线网卡,为什么要去修改GINA,而且是这么敏感的组件:我的登录用户名和密码与无线网络有关系么?而且,为什么会毁掉我的 Application Data目录?如果不是我之前知道一点Windowsçš
„东西,也许只能重装系统了,于是两年多的用户习惯,首选配置,甚至邮件都可能丢失。

而我,本来只是为了更新一下驱动程序罢了。

动手增强了一下笔记本上的开发环境

2007年10月20日 5 条评论

主要就是Visual Studio 2005了。

先是一个名为Microsoft
Visual Studio 2005 IDE Enhancements
的包,其实就是一个PowerToy的集合,提供的东西不少,但是能用
起来的不多:

Source Code Outliner : The Source Outliner tool is a
Visual Studio extension that provides a tree view of your source code’s
types and members and lets you quickly navigate to them inside the
editor.

装上之后没有发现在哪里可以启用,也没发现UI上面有什么改进……

Visual C++ Code Snippets:The Visual C++ Code Snippets tool lets
you insert snippets in your code by using a pop-up menu that contains
programming keywords. VB.NET and C# languages have this functionality
in Visual Studio 2005.

期盼已久的功能啊。但是自带的snippet全部都是C++/CLI的格式,结果我还要一个一个改过来。
不过格式挺简单的,应该可以自己随意扩展。

Indexed Find : The Indexed Find tool is a Visual Studio
extension that uses the Microsoft Indexing Service to provide improved
Search capabilities to the integrated development environment (IDE). It
sends the results of a search to the Output Window.

听起来很不错,但是如果把索引服务禁用了呢……

Super Diff Utility: The Super Diff Find tool is a Visual Studio
extension that compares text files. It uses color coding and graphics
to show the difference between the files in deleted text (red), changed
text (blue), inserted text (green).

同样,没找到在哪里调用。

Event Toaster Utility: The Event Toaster tool is a Visual Studio
extension that notifies users about specific events within the Visual
Studio IDE.

装好之后发现托盘里面多了一个图标,但是“specificevents”指的是什么呢?我原以为是build
finish之类的,试了一下似乎不是。而且没有找到从哪里可以specify一下……

但是不管怎么说,只凭Code Snippet这一个功能就足以让我非常高兴了。

另一个增强是Consolas字
体,确实是写代码的好字体。在公司的机器上面换了有一段时间了。效果不错,这次把它装到笔记本上。
选个好字体,保护眼睛。

贴几张图,对比一下:

10pt Consolas:

10pt Lucida Console:

10pt Couriew New:

显然Consolas更加紧凑,而且对于OPQ的O和012的0区分的很好,其实最关键的还是它可以充分利用ClearType,在液晶屏上面的效果比
Courier
New清晰得多,而且具有Anti-alias(反锯齿),10pt可能看不出来,但是在字体比较大的时候,比如我在公司机器上用的18pt(没办法,眼
神不好),Consolas字体边缘明显比Lucida Console清晰得多。

BTW: 十七大么?现在live space处于半瘫痪状态……
这样的情况下,只好使用 EMail发布 + RSS订阅了。
不过话说,如果这RSS(HTTP)看成是客户端从服务器拉数据的话,那么EMail(SMTP)不就是一个很好的向上推数据的东西么。

标签: