1
Posted on 下午4:11:00 by Fan Zhang and filed under

  如果你错过了煎蛋这篇:学会条码,在它被遗弃之前,不要紧,你依然可以通过阅读本文快速掌握人眼扫描、解码,从而破解出这些粗细条条蕴含的深刻含义的高科技技能。

条形码的意义

  按照八股论文的写法,我应该先介绍下条形码的NB之处,以提醒读者此刻正在阅读一篇有着深刻含义的文章。

  2009年10月7日,Google 为了纪念1952年10月7日条形码 (Bar Code) 成功申请专利(专利号为2612994),首页 Logo 都改成了条形码。这个日子恰好与高锟、乔治·史密斯、威拉德·波义耳被授予诺贝尔物理学奖的时间重叠在一起,而他们发明的"电荷耦合器件"在用于扫读条形码的方面作出了贡献。

  为了继承这宝贵的文化遗产,应对外星人入侵地球导致所有条码扫描仪都失效的情况,我们必须学习条形码!当然,某些三俗的读者可能觉得"在MM面前显摆才是真正的目的"。

准备工作

  对正常人来说,只要能看见东西就行。

  如果你有条码扫描仪,可以用来通过扫描实物来做练习。不要问:"我都有扫描仪了还学什么?"这种弱智问题。

条码介绍

  所谓万变不离其宗,下面介绍的是通用的 Code 39。条条们分为四种:细细的白条、粗粗的白条、细细的黑条、粗粗的黑条。它们分别代表条码中所用的四个符号:空格、破折号、0和1。对应关系如下:

  • 细白:空格
  • 粗白:破折号
  • 细黑:0
  • 粗黑:1

  也就是说,粗细不等的黑条表达了主要的编码,白条则表达分隔符。注意到,空格的含义并不是指编码中的空格,而是要分离相邻的两个黑条。破折号不仅可以分离相邻的黑条,还可以表达破折号的含义...

  题目:阅读下面的条形码,写出它代表的二进制编码。

  答案是:0-0110|10-010|01-100|00-011|10-100|11-000|00-110|01-010|0-0110,其中的"|"不在条码表示的范围,是为了更好的阅读手工加入的,5位一组。

  那么这堆数字表示什么含义呢?就要熟记下面的编码含义了:

  • * = 0-0110
  • 0 = 00-110
  • 1 = 10-001
  • 2 = 01-001
  • 3 = 11-000
  • 4 = 00-101
  • 5 = 10-100
  • 6 = 01-100
  • 7 = 00-011
  • 8 = 10-010
  • 9 = 01-010

  于是,上面的条形码表达的编码含义为:*8675309*,至此,恭喜你已经具备了技能:阅读条形码 Level 1。

更多技巧

  有同学立刻提问,那个星号是什么意思。在正规的 Code 39 中,开头都有一个"*",它的作用和男人的乳头是一样的(亦即区分正反面...煎蛋怎么这么邪恶)。

  又有同学说了,阅读出 01 串比较简单,怎么跟数字对应上呢?这叫涉及到当初设计条形码编码时的高深理论了:我们可以看到,每一个条形码如果表达的含义是数字,则它是形如:ab-cde 的形式。

  • e 是奇偶校验用的,无视。
  • 有两个1和三个0。
  • 左边四位按照逆序排列dcba,其值是:1-6、8-10、12,分别对应真实数字中的:1-6、7-9、0。
  • 为何跳过7和11?是为了校验方便,避免出现三个1的情况。

更多疑问

  感谢坚持阅读到这里,您可能会有疑问:"知道了数字,我还是不知道有什么用啊?怎么知道定价呢?"这很简单,只要你能连上商场超市的数据库,查询对应条码即可。至于怎么连上数据库,就是另外一个问题了。

  也有同学对本文表达质疑:"现在条形码下面似乎都有数字啊"。我想说,怎么这么死脑筋,难道不会把数字挡住,然后对身边的MM(不排除是GG)说:"你看,我不看下面的数字也能说出下面的数字!厉害吧!"。

更多链接

   Read a Barcode

1
Posted on 下午11:58:00 by Fan Zhang and filed under ,

  近日,Google Maps 发布了黑莓上的 3.20 版本。用手机访问:m.google.com/maps 下载。

  相信很多人都遇到第一次打开就连接不上的问题:

Network Unavailable: This application requires a data connection, and some BlackBerry devices require reconfiguration to work properly. Please visit www.google.com/gmm on your computer for more info.

  这是不是北京移动的问题我不知道,我只知道,去国贸转一圈就行了...我出了金台夕照地铁站,立刻就正常了。就好像激活,只要打开一次,以后其他地方也没问题了。

0
Posted on 下午7:35:00 by Fan Zhang and filed under

  186 入网,预约订单失效后,预约的号码虽然重新出现在列表,但是无法选择,提示被预定。

  分析应该是失效订单还存在导致的,这个失效订单不仅让此号码锁定,而且导致我登记的身份证无法再选择别的号码。

  订单不论是否失效都无法取消。  

  打了一圈客服,自然没用,希望转到技术部门后能快点解决。

3
Posted on 下午6:18:00 by Fan Zhang and filed under

  国庆期间,各种翻墙工具都不好使了,连 Tor 都挂了。我平时又不思进取,只会这一种方法,算是束手无策了。

  尝试使用 GAE 的那个代理,结果犯傻,域名竟然起了个 acrossgfw,还没连上就被封了...

  现在使用这个方法加上各种 VPN 终于可以上网了...

0
Posted on 下午11:05:00 by Fan Zhang and filed under

  冲动消费下的产物。

  1. 这款手机有两种颜色,都挺好看的。
  2. 入手第一感觉是轻薄,从外壳上看做工比较精致。
  3. 屏幕在阳光下表现一般,可能会看不见,而且没有亮度调节的选项。
  4. 屏幕显示细腻,字体清晰美观,但无自定义选项。
  5. 输入法没有智能功能,只能一个字一个字地输入,有后续字的联想功能。
  6. 支持存储卡,购机时包装盒内附赠 1G 存储卡。
  7. 支持蓝牙。
  8. 3.5毫米耳机插孔。
  9. 200万像素摄像头,无变焦。照相和摄像效果就那样。
  10. 按键个人感觉比较舒适。
  11. 娱乐功能较强,支持音频、视频播放。
  12. 有 PC 端软件。

  总之,对于我所花费的价钱来说,还是比较满意这款机型。

  另外,CMDA 必须激活呼叫等待功能才能实现上网的时候对方打电话不会提示占线。激活的方式很简单,可以从手机的菜单里面选择,也可以手动拨打:*74(然后按发送键)。至于此项功能是否收费,请咨询当地运营商。

附录:

  网易手机:华为轻薄CDMA手机C5600评测

0
Posted on 下午10:48:00 by Fan Zhang and filed under

  给通过搜索引擎进来的一句话摘要:我没折腾出啥结果,没有办法破解电信的限制。

  近日电信活动,弄到了一个特别破的手机:三星 SCH-B189。

  目前进展,可以通过 Samsung New PC Studio 连接到手机,但是没法控制手机上的文件夹,也没有办法安装软件。使用 PC 连接手机的方法如下:

  1. 在手机中输入 *#2739#,选择打开端口,要求输入的 PIN 为 *#67367678#
  2. 在手机中输入 *759#813580,选择端口映射图,进入数据,选择 USB CDC
  3. 安装 Samsung New PC Studio,官方有下载,我安装的是 1.1.0 Build IB5。
  4. 使用普通数据线就可以连接上,同步短信,通信录,日程备忘等。

  这款机器是初始密码是8个0。

  可以刷机,但是买来的时候已经是最新的版本 CD30,还找不到破解的版本。网上可以搜索到刷机的过程和软件,我没刷就不写了。

  通过 *759#813580 可以进入测试模式,命令代码和网上说的有些不太一致,但是我从 001 试到了 100,没试出什么激动人心的命令。

  此外,通过菜单-天翼-手机下载,可以看到很多收费的 Brew 应用,注意到在下载列表的时候就会计算流量,且电话占线。如果查看手机内存状态,发现应用那项占用了一部分,应该就是下载的软件目录。这个缓存我尝试使用菜单-设置-复位,不能清空。有一个小技巧,就是切换一下手机的语言,就清空这个缓存了。

  除去不能上网,其他功能都设计的不错。通讯录支持手机和卡之间复制,日历有日程安排和农历显示,可以设置多个闹钟和关机闹钟,输入法使用流畅。

0
Posted on 下午5:06:00 by Fan Zhang and filed under

  安装了 VS2008 SP1 后每次打开"工具箱"都会提示:

包加载失败

未能正确加载包"Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage, Microsoft.Data.Entity.Design.Package, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"( GUID = {8889E051-B7F9-4781-BB33-2A36A9BDB3A5} )。请与包供应商联系以获得帮助。由于可能会发生环境损坏,建议重新启动应用程序。要禁止将来加载此包吗? 可以使用"devenv /resetskippkgs"重新启用包加载。

  按照提示使用 "devenv /resetskippkgs" 自然是毫无效果。网上出现的"包加载失败"错误多是不同语言环境造成的问题,而这个错误显然不是这个问题。

  漫长的探索、重装过程就不说了,解决方法是 Visual Studio 在安装的时候需要勾选上组件 Visual Web Developer ,我估计问题是因为 SP1 的安装时不管三七二十一,直接全部安装,而没有判断之前 Visual Studio 2008 安装时候选择的组件,所以导致某些组件缺失。

  一句话总结,要把 Visual Studio 好好供起来,别想着折腾了...每次都选默认安装(或者完全安装)就没事。

  我的环境如下:

  • Windows XP SP3
  • Visual Studio Team System 2008 Team Suite (90 天试用版)
  • Visual Studio 2008 Service Pack 1
0
Posted on 上午3:27:00 by Fan Zhang and filed under , , , ,

  显卡是 ATI HD 4650,支持 ATI Avivo 技术,可以利用 GPU 编解码 H.264 等格式的视频。

  但是使用起来还需要进行设置,网上一搜就有一大堆文章,反正都不怎么好用。还说要从 PowerDVD 提取解码器,看着就觉得麻烦,而且人家是收费软件吧?还有用 KMPlayer 的,个人不是很认同违反开源协议的。

  最简单的方法就是安装一个 K-Lite Mega Codec Pack,使用里面的播放器 Media Player Classic Homecinema。设置方法如下:

  • 在菜单中选取 View -> Options -> Internal Filters
  • 勾选 Transform Filters 中的 H264/AVC (DXVA) 以及 VC1 (DXVA)

  这个时候,选择一个 H.264 视频播放,看看 CPU 占用率和之前相比,如果小了很多就说明使用了硬解,否则就是没有成功。或者在播放的时候,点右键 -> Filters -> MPC Video Decoder,是否启动了 DXVA 模式。

  经过我的测试,似乎对于某些高级编码级别无法解,显示不出图像,但是大部分显示正常。设置播放就完成了,下面再写一些资料。

  ATI Avivo 的对手是 NVIDIA PureVideo,GPU 编程我也不懂,似乎 NVIDIA 的 CUDA 架构编程更自由,CoreAVC 就是使用 CUDA 技术来发挥显卡资源的。

  微软和图形芯片厂商联合制定了一个硬件接口规范 DXVA (DirectX Video Acceleration),规定了几个硬件解码加速的级别,基本上支持的格式也就 H264 和 VC-1。而前面提到的 CUDA 就不是一回事,它是一个通用计算技术,所以更自由,可以更灵活挖掘显卡资源。

  在安装显卡驱动的时候同时安装的 ATI AVIVO Codecs 应该就是支持硬件编解码的驱动程序。在 Windows 上想要利用显卡资源,应该是通过这个驱动沟通的。

  很多人都提到的 CyberLink PowerDVD 的 H.264 解码器,搞不清楚是不是免费的,应该就是这个解码器利用上了 Avivo 等技术。而普通的 ffdshow 应该都是软解,目前还没有利用上 GPU 资源。名为 CyberLink Video/SP Decoder (PDVD9) 的 Filter 应该是解 mpeg2 的,似乎免费。

  而我使用的播放器 MPC-HC 则在程序内提供了 DXVA Support。MPC 的参与者都是大神级别的人物。有兴趣的可以去 http://www.xvidvideo.ru/ 看看。下载一个 MPCVideoDec.ax 就可以在别的播放器里面使用 MPC Video Decoder 从而开启 DXVA 模式了。

  至于编码,则要下载一个 Avivo Video Converter,不过对视频参数的设置很少,虽然快,但是质量一般,适合转换到便携设备,比如 PSP,Mobile Phone 上去。

  相关工具有一个 DXVA Checker,可以去 http://bluesky23.hp.infoseek.co.jp/ 下载。

0
Posted on 下午4:18:00 by Fan Zhang and filed under
  • CPU:AMD Phenom II X2 545,周期编号是 0922。
  • 主板:技嘉 GA-MA770T-UD3P,BIOS 版本 F2。
  • 内存:DDR3 1333 2G x 2

  主板想用 UD4P 但是没货,这款 770 南桥是 SB710,只要支持 ACC(Advanced Clock Calibration)即可,不用必须 790。

  过程很顺利,只要在 BIOS 中把 EC Firmware Selection 改成 Hybrid,并且把 Advanced Clock Calibration 设置成 Auto 即可。此时显示的 CPU 型号是 Phenom II x4 B45。

  主板的北桥温度有些偏高。

2
Posted on 下午7:04:00 by Fan Zhang and filed under ,

Trac 0.12dev 安装记录

by 晓月

参考文档


  Trac Installation Guide for 0.12dev

超简易在线安装


  因为 Trac 0.12dev 是正在开发的版本,所以它的安装过程需要注意各个组件的版本问题,以下操作在2009年7月6日是可行的,但是如果有某个组件版本升级,可能导致问题。

  1. 下载 Python 2.5.4,安装到 C:\Python25。
  2. 下载 setuptools-0.6c9.win32-py2.5.exe,直接运行安装。
  3. 下载 Setup-Subversion-1.5.6.msi,直接运行安装。
  4. 下载 svn-python-1.5.6.win32-py2.5.exe,直接运行安装。
  5. 安装 Genshi,运行:easy_install Genshi==dev
  6. 安装 Babel,运行:easy_install Babel
  7. 检出 Trac:svn export https://svn.edgewall.com/repos/trac/trunk trac
  8. 在 trac 目录运行:python setup.py compile_catalog -f
  9. 在 trac 目录运行:python setup.py install
  10. 安装完毕,此时 trac 目录可以删除。

离线安装


  在线安装虽然简单方便,但是感觉不太可控,而且重新安装起来比较慢。下面就介绍如何把依赖的包下载到本地。

  Genshi 在下载页面只有 0.51 版本,而 Trac 0.12 需要 0.6(r690以上)的版本。因此需要自己手动打包成 egg 文件。
  1. svn co http://svn.edgewall.org/repos/genshi/trunk genshi
  2. 在 genshi 目录,运行:python setup.py bdist_egg
  3. 在 genshi/dist 目录,得到相应的 egg 文件。

  Babel 使用下载页面上的 Babel-0.9.4-py2.5.egg 就行。如果从 SVN 检出最新的代码(1.0dev),配置还需要进行比较复杂的操作,参见文档:Setting up Babel from a Subversion Checkout

  Trac 需要在打包之前先编译一下翻译文件,过程类似于在线安装,就是第一步把导出改成检出(为了包含版本信息),最后一步改成打包:
  1. svn co https://svn.edgewall.com/repos/trac/trunk trac
  2. 在 trac 目录运行:python setup.py compile_catalog -f
  3. 在 trac 目录运行:python setup.py bdist_egg
  4. 在 trac/dist 目录,得到相应的 egg 文件。

  这样在安装的时候,使用如下命令即可:
  • easy_install Genshi-0.6dev_r1063-py2.5-win32.egg
  • easy_install Babel-0.9.4-py2.5.egg
  • easy_install Trac-0.12dev_r8345-py2.5.egg

SVN 版本造成的差异


  如果,SVN 使用的不是 1.5.x 版本,而是 1.6.x 版本,因为 checkout 格式发生变化,导致 setuptools 无法正确获得版本,详见 Trac Ticket #8365。这就导致安装 Genshi 以后版本号不对,在安装 Trac 会提示:

No local packages or download links found for Genshi>=0.6dev-r960
error: Could not find suitable distribution for Requirement.parse('Genshi>=0.6dev-r960')

  因此,如果使用 SVN 1.6.x,目前解决方法是手动修改 egg 包的名称和内部 EGG-INFO 的版本信息。手动版本信息从 0.6dev-r0 修改成类似 0.6dev-r1063,其中 1063 是 SVN 的版本号。或者在安装之后,修改 Python 目录下的 easy-install.pth 文件。

  SVN 1.6.3 下载:

一些说明


  有版本有"洁癖"的人,相信总喜欢用最新的版本,但是对待类似这种问题,还是老老实实用稳定的版本省心。比如 Python 3.1 都发布,但是因为其各种特性还不稳定(从 3.0-3.1 的变化就能看出),所以很多第三方库都还没有迁移,所以目前我也只能多个版本的 Python 混合使用了。

  很多扩展包使用 easy_install 方式(PEAK 开发的新的 Python 扩展包方式)会比较简单,在安装了上面的 setuptools 后在 Python 目录下的 Scripts 目录就有了。

  SVN 似乎在 Apache 2.0 和 2.2 版本上有分支,所以根据使用的 Apache 选择合适的版本下载。SVN 安装完成后要设置环境变量。比如 C:\Subversion\ 是安装目录,注意安装完检查是否设置好了环境变量:SET APR_ICONV_PATH="C:\Subversion\iconv"。

  svn-python 是 SVN 自身提供的 Python 模块,用来操作 SVN。操作 SVN 的 Python 模块还有 PySVN,不过 Trac 使用的是 svn-python。









修订记录:
2009-07-06:初稿。

0
Posted on 上午1:28:00 by Fan Zhang and filed under

  在用 DirectShow 写程序的时候,被 Renderer Filter 的问题折腾了好几次,有的问题一开始不了解还觉得莫名其妙,虽然说到现在也不是完全明白,但好歹解决了。

  我曾经遇到的问题有:

  1. 将一个解码器封装成 ActiveX 控件,但是遇到刷新问题,就是拖动窗口的时候才刷新。奇怪的是,在有的机器上就没有问题,即使配置一样,而且和 IE 版本也没什么关系。
  2. 在一个桌面播放器中同时播放4个视频,都附着到一个窗口上,但是左上角一路异常,总是打开比其他几个慢,而且拖动窗口时会反应迟缓,总之就是它特殊,但是程序中完全是一样对待的。
  3. 使用远程桌面连接的时候,看不到播放的视频。这个是小事。

  以上问题通过搜索,主要解决方法有:

  1. 折腾 OnDraw(), OnPaint(), OnEraseBkGnd() 这几个函数,要 put_owner 在窗体上,由窗体的 WM_PAINT 来刷新。
  2. 修改控件属性,添加处理消息。
  3. 不使用默认的 Renderer Filter,手动使用 VMR-9。

  也是我水平不高,还就替换 Renderer Filter 好用,手动刷新的方法在上面第二个问题的时候就不怎么好使。而且 DirectShow 提供了多个 Renderer Filter,换一个更高级的往往能解决问题。

  但是,我只是知道,比如 VMR-9 中自己管理了刷新机制,所以上述这些问题都能解决,但是如何处理的还不明白。

  DirectShow 中自带的 Renderer Filter 挺多的,甚至还有同名但是 CLSID 不同的,在 MSDN: Choosing the Right Video Renderer 中有一个较详细的介绍。通过以下 CLSID 以及 MSDN 上的资料应该能回答有关 Renderer Filter 的疑惑。

  • CLSID_OverlayMixer // {CD8743A1-3736-11d0-9E69-00C04FD7C15B}
  • CLSID_VideoRenderer // {70E102B0-5556-11CE-97C0-00AA0055595A}
  • CLSID_VideoRendererDefault // {6BC1CFFA-8FC1-4261-AC22-CFB4CC38DB50}
  • CLSID_VideoMixingRenderer // {B87BEB7B-8D29-423f-AE4D-6582C10175AC}
  • CLSID_VideoMixingRenderer9 // {51b4abf3-748f-4e3b-a276-c828330e926a}
  • CLSID_EnhancedVideoRenderer // {FA10746C-9B63-4b6c-BC49-FC300EA5F256}

  以上 CLSID 都可以在 Windows SDK 中的 uuids.h 找到。

   Overlay Mixer 不怎么用,Enhanced Video Renderer (EVR) 是 Vista 之后的,还没用过。VMR-9 最强大,如果能用(系统软硬件支持),一般能解决问题。VMR-7 以及更早的,我也分不太清楚细致的区别,其中 VMR-7 本身就有两个Filter,其中一个还和 Video Renderer Filter 的 friendly name 相同,都是 "Video Renderer"。

  因为 Renderer 接收的是 RGB/YUV 数据,然后交由显卡处理显示,所以显卡的差别会导致性能的差别。此外,VMR-9 因为有更强的功能和更好的质量,所以会占用更多的资源,在不同的显卡上,可能会有实例 (instance) 的限制,比如只能显示 7-8 个窗口,而 VMR-7 则限制小很多。

  在陆其明的书上有一些介绍,网上很多文章都是这本书上相应章节内容,搜一下"关于VMR7、VMR9、Video Renderer"就能找到。

  一句话总结,系统资源允许的情况下,使用高级的 Renderer Filter,否则就只能使用较低版本的 Renderer Filter,手动解决出现的种种问题。

5
Posted on 下午3:01:00 by Fan Zhang and filed under ,

  原谅我...实在忍不住,还是决定转载下这篇文章以及 CCTV 相关报道,留作纪念。按照习惯,先给链接:

  前几天,知名软件"绿坝-花季护航"我都没兴趣说,现在看来是舆论控制不住想要转移视线,或者央视又没钱修大楼,或者真的是有人闲的没事干,现在拿"谷歌中国"下手了。

  明白的人都知道搜索引擎可以做什么不可以做什么,就不对这些"小事"评论了。本博客主要关注的是互联网娱乐新闻,所以主要探究下本次事件的娱乐性。

  我个人觉得报道中最精彩的还是"各地网民"的发言意见,比如:

  网友"卡卡"在网上发帖留言称:"谷歌中国,这个网站太邪恶了,今天我在搜资料的时候搜到了很多的色情信息,我想如果是鉴别能力比较低的青少年看到这样的标题和图片肯定会受到不良影响,恐怕在以后我都不敢让我的孩子上网了"。

  我感到很震惊,你 TMD(TMD=甜蜜的)搜什么资料能出来色情信息啊...我看你就挺邪恶,你孩子以后上网学坏就是你管教不严。另外,你和瑞星啥关系?我觉得新浪上就有很多不良的标题和图片。

  中国人民大学院新闻系的同学小青告诉记者:"作为80后的一员,我们现在大三的学生对互联网的需求特别的强烈,基本每天都能用到……"当记者提到谷歌时,同学们更表达了自己的不满:"谷歌作为国外知名搜索引擎,进入中国是一件好事,但是在搜索中谷歌出现的不该有的东西还是让我们无法接受,甚至搜索一些 学术词语都可能会出现不良内容,对于这样的网站我们应该强烈谴责!"。

  别80后,没人愿意跟你套近乎,不知道这位人大同学你搜索什么"学术词语"啊?不过考虑到你是新闻专业的可以理解,是在搜索"淫秽低俗"吗?我就奇怪了,搜索"淫秽"难道还能给你返回新闻理论的资料(别说,百度还真是这样...)?不接受你就用百度,你有什么不满的。

  北京理工大学计算机学院的王同学,则从专业角度告诉记者:"对于这样的一种行为,谷歌中国是完全有悖于互联网道德的。而且从技术的角度讲,谷歌中国完全有能力屏蔽掉这些不良内容,他们正是因为利益的驱使而'顶风作案',我们不但该深深地批判、谴责这样的行为, 更应该在以后的工作、学习中放弃使用这样的网站"。

  这个王同学太不像话了,你学计算机的,人不能这么无耻,有种你以后别用Google。还技术角度,还利益驱使,看似一本正经,其实满嘴胡话。

  还有违法和不良信息举报中心的专家们,你们让我长见识了,我能想到的关键词太土太俗太普通,我也承认我词汇量不高,通过观看节目和课下学习,我掌握了三个新单词:boobs,butt,shoulder 的含义。都搜"boobs"了,还想让搜索引擎返回什么?

  最后,我有一个可爱的妹妹,我同样关注互联网的健康和安全,但是我认为应该把功夫用在正确的地方。所以试图嚷嚷"你没孩子你不知道有多危险"的网友就不要留言了,当然了,如果您没有看到这段话就发表了如上评论,我会帮您删除的,不用谢。其实目前 Blog 是封锁状态,估计一般人也留不了言...

0
Posted on 下午5:39:00 by Fan Zhang and filed under

  都怪这次剧情进展迅速,早知道就跳过这集了。

  我没看过漫画,也不知道谁告诉我"这次按原作,修兹不死了",我还信以为真了。

  感觉真悲伤,虽然只是动画...

  拖了一周才写,以此纪念。

5
Posted on 上午1:28:00 by Fan Zhang and filed under

  今天去参加了 Google 开发人员日的活动:

  以前参加过微软的硬件工程和移动与嵌入式开发者大会(见闻),Google 的活动是向往已久,第一次参加,非常高兴。我随手拍了几张照片,见相册:

  我早早就起床赶到场地,这时候人还不多,就听见工作人员在大喊:"快交出邀请函",我连忙听话地交了打印好的邀请函签到。顺便说一下,看签到处的情况,似乎有 3000 人,实际肯定来不了这么多。我的号码十分靠前,但是当初发确认信的时候出了纰漏,直到最后我才收到确认。幸好最后还是收到了,不然又要错过了。

  首先是李开复博士的演讲,十分精彩,不愧是职业的。同时看到了 Google Wave 的演示,这个我前几天就在新闻中看到了,但是实际看到演示时,我感到非常震撼,是一款能令人热血沸腾的产品,因为今天主要是见闻,所以涉及技术的就不说了,一搜索肯定有更详细的介绍。此外还有 Map API、iGoogle 、OpenSocial、HTML5 等产品和技术。

  接着就是第一个分会场课程,注意到本次大会有几十个课程,但是我只能选择 5 个来听。讲的不是很深,但是很有收获。中午的时候午餐是盒饭,不能说好吃,无功无过吧。下午继续听课。

  所有课程结束后,我领取了纪念品:一件 T 恤和一个电脑包。图片中有电脑包,是绿色的,设计和质量都很好,只是颜色不太喜欢。T 恤也是绿色的,太难看了这颜色,所以我连照都没照。

  晚饭是自助餐,同样是无功无过(我是不是口味太挑剔了...),需要排队,没有正经桌子,都在主会场吃,同时主会场也有乐队表演(其实就一首歌)。接着是开发者们进行交流,我看礼品不怎么吸引人也没有 Google 特色就闪人了。出门的时候是 19:30,按照日程这个活动应该是 20:30 结束。

  因为是免费的活动,我觉得相当不错,组织和安排都比较好。而且我又吃又喝又拿的,一整天心情很愉快!

2
Posted on 上午12:16:00 by Fan Zhang and filed under

  IT 界也有很多娱乐新闻,以前瑞星是主要制造者,自从"DNS事件"后,暴风逐渐显露出其娱乐天赋!

  且不说断网事件是谁引起的,暴风有没有后门(没有后门我也不用...),单看其对网易的态度就让我想起一句话:惹谁也别惹流氓...

  事情大概是这样的:在暴风影音的 DNS 服务器受攻击导致全国大面积网络瘫痪后,网易科技发布了一系列针对暴风影音后门程序的文章。暴风自然不干了,在其播放软件的弹出窗口中做出反击,陆续发布如下文章:

  1. 网易博客沦为卖淫女招揽生意平台
  2. 网易传播淫秽信息被谴责
  3. 色情泛滥,网易聊天室终关门
  4. 焦心拷问:十问丁磊
  5. 专家痛批网易"博眼球赚点击"
  6. 卖淫女广告!网易博客很危险
  7. 网易财经很黄很暴力
  8. 网易已出局,搜狐新浪才算真正门户
  9. 网易与暴雪联手操作,必将是四败俱伤

  真是全方位批判啊,专家也上阵了。不仅如此,还提供了问卷调查:"你认为网易是流氓网站吗?" ,"呼吁"流氓网站、淫秽内容危害网络,清除毒瘤还我洁净空间!最后还有互联网违法和不良信息中心的举报电话...

  以上消息也是来自于别人的截图,我没有安装暴风影音,不知道是不是真的,哈哈。

  如果你的机器上也安装的暴风影音,并且对其也没有太深的感情,不妨换一个播放软件,比如 K-Lite Mega Codec Pack 是一个很好的选择。

1
Posted on 上午12:37:00 by Fan Zhang and filed under

  使用 MATLAB 内置的符号计算工具箱(Symbolic Math Toolbox),会返回如下错误:

??? Error using ==> mupadinit at 35
Unable to initialize kernel

Error in ==> mupadengine.mupadengine>mupadengine.evalin at 117
[res,status] = mupadmex(statement,8);

  这是和安全卫士360有冲突,将360及其保险箱完全卸载并重启后问题解决。

  这个问题已经出现一段时间了,但是在 360 v5.1.1 版本仍没有解决,我在 MATLAB 2008b 和 2009a 中都遇到此问题。

  目前最简单的解决方案就是卸载360相关程序,有人说卸载后再重装360可以解决,但是我只要一安装360问题就出现。

2
Posted on 下午10:02:00 by Fan Zhang and filed under

  据说是因为快到某些日子了,所以 blogspot 和 blogger 都无法访问。其实,即使没有特定日期,想封也就封了。

  在这样艰苦环境下发文,一是表达一下封锁实在是给我造成很多不便,二是体现一下我迎难而上的好品质。

  最近两三个月发文量不多,还是有很多要写的,大部分还停留在零散的草稿阶段...等到不太忙的时候再整理整理。

3
Posted on 下午4:19:00 by Fan Zhang and filed under

  本文是就近日《中国青年报》多篇质疑"戒网中心"和负责人杨永信(维基:杨永信)的文章:

及其相关事件的评论。本文不是一篇客观的文章,不讨论网络是否造成危害,不讨论青少年是否容易走偏,只是纯粹的惊讶、震撼以及感同身受般的痛苦和愤怒。

  这已经不算新闻了,去年就看过央视的《战网魔》:谁把天才变成了魔兽。当时我对其嗤之以鼻,以为就是一个新闻广告而已,顺便对 WoW 恶意丑化和攻击,而被治疗的对象的种种不自然行为也觉得是因为在拍广告导致的。今天重新看了相关的内容,认真了解了"治疗"的过程,我先是被吓住了,然后是觉得不可思议,这种事情怎么能堂而皇之地宣传?

  尽管随便一搜索就能看到很多对"戒网中心"和杨教授的质疑甚至谩骂的文章,但不妨碍我在此继续表达质疑和指责。

  我对网瘾中心毁灭人性的残酷环境和极端粗暴的治疗方法的了解恰恰是从对其吹捧的电视纪录片和纪实文学中看到的。首先是 CCTV12 《第一线》栏目播出的 12 集电视纪录片,分为《战网瘾》和《战网魔》两部,有 DVD,目录如下:

DVD1 战网瘾篇
  少女的耳光和拥抱(上)
  少女的耳光和拥抱(下)
  双胞胎的爱与痛(上)
  双胞胎的爱与痛(下)
  瞧这两个"孕妇"

DVD2 战网魔篇
  爸爸的誓言和八十副拐杖
  九只羊和少女的呐喊
  黑客之王的早恋生活
  谁把天才变成了魔兽
  蒙面大侠和金童玉女(上)
  蒙面大侠和金童玉女(下)
  "黄河"保卫战

这一个个题目倒真有标题党的潜质,如果想看通过搜索题目在优酷一类的视频网站就可找到。与之相关的是刘明银所写的纪实文学《战网魔》(在线阅读:新浪读书)。视频和文字非常详细,原话是:"完全原生态地纪录下来,用绝对真实的场景去感染读者和观众",我的确是被震撼到了!

  很无奈我必须在文章里面转载那些令我不舒服的文字,首先一个例子是:《少女的耳光和拥抱》,在书中是第一章,里面有赤裸裸的电刑和威胁,参考上文提到的一个网戒中心的生态系统这篇文章可以快速了解。下面摘抄几段她刚进中心时的内容:

  杨永信以他惯有的表情,微笑着向盟友点头,说道:"你们好,做好准备!"盟友们都明白这句话意味着什么,表情严肃起来,兴奋中包含着一种恶作剧的快感,初来乍到的盟友是无法理解这其中的奥秘的。方磊幸灾乐祸地对杨奎嘀咕说:"哟,还是个姐姐!看样子也得先去'吃饺子'。杨奎,你说她能吃几个?"

  (注:"恶作剧的快感,幸灾乐祸",真是很可怕的地方,这就是所谓的盟友?)

  护士拿出一个橡皮牙垫,对少女说:"来,张嘴,垫在嘴里,它能保护你的牙齿和……舌头。"

  (注:这就是所谓的吃饺子!)  

  "不,我没有网瘾,我不要做检查,你们让我走!"了解了目的,不过是一次检查,没有什么可怕,少女硬起来,自信又回来了,她确信自己没有网瘾。

  "现在没有你选择的自由了,你想证明自己,就得付出一点代价。"杨永信说着,从小仪器上取出两个端子,一手一个,调试了电量,对着少女的太阳穴轻轻地点了一下,少女的头部马上有一点轻微的抖动,身体倒是不僵硬了,呼吸也正常了,牙却咬得很紧。

  (注:太邪恶了!什么叫没有选择的自由了?什么是付出一点代价?)

  "难受吗?"杨永信盯着少女的脸问道。

   "不难受!我没有网瘾!"少女够种,明明脑袋有点疼,为了证明她没有网瘾,她却硬说不难受。 "那好,再来一下。"杨永信又点了一下,少女的脑袋有点受不了,颤抖了一下,可她咬紧牙关,不说难受。杨永信在两个太阳穴上同时点了一下,少女受不了了,叫起来:"我难受,我难受,医生,你这是用的什么东西,我的脑袋为什么这么难受?"

   "不是仪器的问题,是你有网瘾,有网瘾就难受。"杨永信进入角色,开始心理引导,"告诉我,你叫什么名字?"

  (注:有网瘾就难受?这叫什么?滥用权威吧?作者真是学文的,竟然还觉得这个很神奇,电你一下你就知道了。)

   "我不想告诉你,我想离开这个地方,我想去找我未婚夫……"短暂的不舒服消失了,少女伤疤未好就忘了疼,又想叫板。

  (如此痛苦且无助,竟然是伤疤未好忘了疼,作者这么多年白学中文了。也亏如此,我们才得以知道真实的场景。)

   "看来你有点健忘,好吧,我们接着做检查。盟友们替我记着时间,按照一般的程序是要做6个小时,每次按一秒算,每分钟60次,每小时3600次,你们算一算,6小时要做多少次?"

  "21600次。"方磊抢着说。他知道,这是威慑治疗,他也经历过的。这世界上肯定没有人能经受这么多次,能挺过十几次的就算是英雄了。

  "好吧,你们数着,接着来。"杨永信在少女的太阳穴上又点了一下,比前几次的时间略微长一点,少女的反应更强烈了一些。护士又把橡皮牙垫送到她的嘴边,她还是咬紧牙关,不张嘴。 "你想想,你打你父母对不对?"杨永信又点了一下,换了一个问题。

   "不对……我打他,是因为他打我,他打我妈妈……医生,我难受,你还要再做吗?你真要给我做两万多次吗?"少女的防线开始松动了。

  (注:赤裸裸的威胁,盟友也是帮凶,屈打成招就是这么来的!)

这一章的主人公武旭影在离开戒网中心据说立刻"反水", 披露杨永信戒网中心实施不人道的监禁和虐待手段并非法使用电休克仪器,且对被监禁人员进行传销洗脑式的精神摧残,强迫其人员必须"绝对服从杨叔的命令"等内容。(参见:我的小故事及在"杨永信网戒中心"的心理日记,链接备份: ,是否真实还需确认,但本文不客观,假不到哪儿去。)

  第二个例子是那个"黑客之王",张正是一个聪明的人,是天才,曾经跳过三级,18岁想结婚却没到年龄,不上学自己开公司,既然是黑客自然要天天接触网络,写过网络小说。当然他成了网瘾患者,被送进了网戒中心。下面是一段"治疗"的描写:

  杨永信没有放张正走,而是带他进了治疗室,让他饱饱地吃了一顿"饺子",张正的"饭量"很大,比谁吃的都多,最后投降得也彻底,一切都交待了,连初吻的事都主动说了出来,让喂他"饺子"的盟友们心里直乐:原来这个呼风唤雨的英雄和帝王,在11岁的时候就是个"情种"!

  (注:天啊!何其悲哀!)

  在纪录片里面充斥着被治疗者所谓的"自白、检讨",家长们对网络的控诉和批判,但是我同时也注意到了其中闪烁的眼神,不自然的表情,以及说到"想回家"时候的真情流露。有人竟然跪下大喊:"杨叔,救救我们吧!",太不可思议了,我是否可以理解为:"我的主宰,放我回家吧!"?在纪录片《把天才变成魔兽》中,有一个家长称:"我为他,多次求过神、拜过佛、爬过山,我心想这是什么原因啊,网络是不是把他的心灵,把他的灵魂夺走了呢?"。且不说拜佛爬山不能解决她"想知道原因"的问题,主要是后面的话明显不符合语境,而且语调由方言变成了普通话,明显的背词现象。

  纪录片的真实本身就是作者眼中的真实,所以虚假、夸张,怎么都好,但正因为如此,才让我看到网瘾中心的真实并不是美好。

  我不懂医学,我个人认为杨永信的做法已经是滥用其精神卫生领域医师的权限实施虐待(维基:电痉挛疗法);我不懂心理学,我个人认为,戒网中心是集中营式的洗脑中心,是对心理的摧残,是对人格的毁灭(参见盟友的行为和态度);我不懂法律,我个人认为杨永信和戒网中心可能触发了极其严重的法律。从电视和书中了解到的是对人权和尊严的无情践踏,难道这在某些人眼里真的是正当的?

  很多家长把孩子骗到中心,他们觉得毁灭人格是好事,一个"乖巧听话"的孩子就是他们想要的。解决网络成瘾更关键的因素是家庭和社会的环境,但是这种话对那些家长说是对牛弹琴。还有比把所有责任归于网络和孩子,再对他们进行洗脑教育更省心省事的方法吗?正是这种不负责任的态度才是造成问题的根源!换句话说,凭什么这些父母可以这样为所欲为?如果是父母错了,谁又来保证孩子的权益?

  如果说家长只是无知的罪恶,杨永信就是彻底的邪恶,我真想知道如果他也在电击治疗室测试"21600次"又将是一副什么丑态!

  再说 CCTV 等宣传、支持者,只看到一个个原本"暴躁乖戾"的"网瘾患者"进了电击治疗室都老老实实,就大肆宣传,真是愚昧。而且很大可能这所谓的纪录片是拿了钱做广告,那就更加体现出其冷漠和恶毒。如果放任这种"只要能治好就可以下猛药"的强盗逻辑,还不知会有多少悲剧。

  杨永信网瘾戒治模式被列为全国重点推广项目,杨永信也获得了2008年度国务院政府特殊津贴(来源:新华网), 社会承认了这种行为,我觉得很可怕。我知道现代社会面临种种难题,简单粗暴的方法只能表面压制而不能根本解决,承认这种模式只能说明这个社会这太急功近利了。

  我承认网络成瘾是有问题存在,有了问题一定要想办法解决,但是,我坚决反对这种方式以及在这种方式下面潜藏的急功近利。网络和个人、家庭和社会,都应该对这个问题承担责任并付出努力。而杨永信模式及其戒网中心,是畸形的产物,或许是利益催生的,无管是出于什么目的而产生的,都不能再这样下去了。

  我期望心理咨询和治疗能在国内健康规范的发展起来,这对解决问题才是有帮助的;新闻媒体能正确引导,而不是收了谁的钱就说谁好;中小学教育要多加引导,而不是在教科书里面教小孩子怎么注册网页游戏。

  后记:这篇文章写了好几天,开始的时候只是对"杨教授"的愤怒。可是越写到越觉得沉重,问题还是存在,我也想不出什么好办法。不得已,只好专心指责和批评。如同文中所说,这是整个社会都要承担的问题,不能因为整个社会都要承担,个体就不再思考,相信越多的人关注和思考,问题会越早缓解直至解决。

0
Posted on 下午5:58:00 by Fan Zhang and filed under ,

  测试环境:

  • BlackBerry 8820 ROM v4.5.0.124
  • Google Sync v0.5.15(1017),Plantform: Blackberry-43

  进行尝试前,请先备份 Gmail Contacts 和 BlackBerry 上的 Address Book。

  安装了 Google Mobile App 后在无聊状态下安装了 Sync,然后一不小心就开始了同步,于是干脆仔细尝试一下这个功能。

  下面是我的使用体验和一些细节方面的实验。首先是 Calendar 方面:

  1. 因为 Google Calendar 可以有多个日历,但是 BlackBerry 上是一个整体,所以在同步的时候可以选择同步 Google Calendar 的哪一些日历(比如日历A,B,C),并可以设定把 BlackBerry 上的日历同步到 Google Calendar 上的哪一个日历(比如日历A)。
  2. 当删除 BlackBerry 上原本属于日历 B,C 的日程时,再次同步并不会同步回来,并且 Google Calendar 上相关的日程也不会更改,但是涉及到日历 A 的更改则会完全同步。
  3. 如果设定了 BlackBerry 上的一些提醒,比如在 Address Book 中的生日,则也会同步到 Google Calendar(并且是重复每年)。

  下面重点是尝试 Contacts 的同步:

  1. 第一次同步没有清空我手机上的联系人,所有信息没有丢失。(注:手机上Address Book开启了"Allows Duplicate Names"。)因为 Gmail Contacts 可以添加非常多的信息字段,所以资料在网络端是完整的。没有出现乱码问题。
  2. 第一次同步过后,联系人肯定有很多重复的,我在 PC 上进行了调整,使用 Gmail Contacts 的合并联系人的功能,然后再同步回去。
  3. 同步的字段有:Title, First, Last, Job Title, Company, Email, Work, Home, Mobile, Pager, Fax, Other, Work Address, Home Address, Notes。涉及到生日的属于 Calendar 的同步范围。不在上述字段的内容不会被同步,比如只修改联系人的头像,在同步时 Sync 也会提示有一个更新,但头像内容并没有同步。
  4. Gmail Contacts 的字段比较自由,比如可以添加几乎任意个 Mobile 号码,但是在 BlackBerry 上 Mobile 字段只能有一个。所以当 Gmail Contacts 的 Mobile 有多个号码时,同步到 BlackBerry 上的只有第一个。同理,在 BlackBerry 上 Work,Home 只能有 2 个,Email 只能有 3 个。
  5. 有一个似乎是 Bug:当一个联系人电话号码比较多,可能是因为 Gmail Contacts 上电话号码字段排序较乱或者和 BlackBerry 相同字段冲突的时候,不能完全同步所有电话号码。 这个时候可以尝试完全重新同步。
  6. 我有 300 个左右的联系人,第一次同步很耗时间和流量,之后不论是小修改还是清空后完全同步则都快很多。

  不论是 Calendar 或者 Contacts,如果在同步中出现了问题,比如上面提到的无法同步所有电话号码时,可以尝试完全重新同步。在 Google Sync 中选择 Options > Menu > Reset Calendar/Contacts Sync,注意这会把 BlackBerry 上的数据清空。然后再重新同步。

  如果不进行这一步,而是通过其他方式清空了 BlackBerry 上的数据,比如 Address Book,这个时候进行同步,没准就把 Gmail Contacts 清空了。

  相关内容:

0
Posted on 下午5:44:00 by Fan Zhang and filed under ,

  这个月截止到今天可以说是我更新最少的一个月了,当忙起来的时候,能静下心写几篇日志也成了奢侈的享受。Folders4Gmail 是很有名的脚本,今天它给我带来了非常愉悦的体验:)

  我有轻微的强迫心理,对信息的收集和组织有洁癖。今天,当我打开 Gmail 时,心里突然升起一股难以抑制的愤怒,因为这一瞬间我想到:

  • 我有滚动一页都显示不下的凌乱的标签;
  • 邮箱里面有无数只有附件且标题毫无意义的邮件(比如 hello);
  • 更不要提那些连附件名也毫无意义(比如 新建文本文档)的邮件。

  于是我花了整个下午来整理后两种邮件,将这些邮件打包后转发给自己,或者下载附件重命名后再发送给自己。真希望Gmail可以提供邮件注释的功能,或者提供修改原始邮件的功能。

  而第一个问题的解决方法就是使用标题提到的 Greasemonkey 脚本 Folders4Gmail。我也希望 Gmail 可以提供可以设定某些标签隐藏的功能。在 Lifehacker 发布的 Better Gmail 2 中含有这个脚本,我倒不想安装那么多功能。

  在安装了 Folders4Gmail 后,就可以给标签分类了,使用方法只要重命名原本的标签即可。比如将原来的"项目1","项目2","项目3",重命名为"项目/项目1","项目/项目2","项目/项目3"就会发现在标签栏多出一个可以折叠的标签目录"项目"。

  需要注意的是,修改了标签名以后,原本的 Filter 可能需要修改。另外,由于标签长度变长了,原来查看 Gmail 中所有未加标签的邮件的方法就不能用了,在 basic view 下提示"Request-URI Too Large",在 standard view 下提示:"the system encountered a problem (#6414)"。

5
Posted on 上午11:42:00 by Fan Zhang and filed under

  已经不是什么新闻。

  WoW 代理权易主,需要转移数据,这不是一天两天的事儿,目前看来 WLK 更是遥遥无期,至少 6 月之前是没什么希望了。

  虽然还是玩不了 WLK,但是我还是很高兴,只因为我不喜欢 9C。我相信在运营游戏、审批资料片、利益分配中有种种困难,但这正是代理商要解决的,而不是要玩家负责。且不说 TBC 特别迟,WLK 忘了开,就是服务器一天一掉线硬是逼迫工会转服,把我所在的服务器变成鬼服,我就感觉特别气愤。

  没有 WoW 的 9C 会不会就倒了,我也管不着,反正 FIFA 和劲舞团我也不玩。

0
Posted on 上午3:47:00 by Fan Zhang and filed under

2009-04-07Up: 更新到 Python 3.1a2,发现似乎问题解决了...

  我在使用 urlopen(...).read() 读取某一个论坛网页的时候,发现获取的内容不全,最为奇怪的是,获取的内容是这个网页最后的部分。给我的感觉是分配给字符串的空间不够,导致读取超过长度限制的时候就把前面的"冲掉"了。但是 Python 的字符串是任意长的,不应该出现这个问题。

  我用同一个程序尝试读取其他网页,包括相似的论坛都没有问题。同时,如果我设置一个很大的值,比如 read(100000),则也能完整读取这个网页。

  后来我仔细查了一下 HTTP Headers,发现该网页 Response Headers 中有如下信息:

  • Content-Encoding : gzip
  • 没有 Transfer-Encoding : chunked 项
  • 没有 Content-Length 域的值
  • 有 Connection : Close 项

  我不太懂 HTTP 协议是怎样规定的,我猜测因为这个网页的服务器没有告之文件大小,所以 Python 在读取的时候也无法预先得之大小,因此在读取的每次读一个新块就会把前一个覆盖。而当我指定一个读取大小时,Python 就会按照连接是否断开来判断是否读取结束。

  以上是我的猜测,因为这个折腾了半天,也没有去查看源代码是如何实现的。希望有经验的朋友能告诉我对不对,多谢!

  另外,使用标准库中的 urllib.request 应该能自动处理 gzip。

  环境:Python 3.1a1。

1
Posted on 上午12:57:00 by Fan Zhang and filed under

  使用 IDLE 运行 Python 程序的时候输出是即时的,但是在命令行下调用 .py 文件的时候,Python 对标准输出默认是有缓冲管理的。也就是说,在程序中尽管 print 试图输出好几行,但是在终端上并没有显示。只有当输出内容足够多的时候才会一起显示。

  之前在配置 Notepad++ 的插件 NppExec 时就遇到了这个问题(见使用 Notepad++ 编辑运行 Python 程序最后一部分)。

  Python 提供一个 -u 参数,使用它可以实现无缓冲的 IO(详细说明可以查看 Python --help)。

  Python 3.0 版本的 -u 参数似乎有一个 bug: Issue4705 (Revision 68451)。安装 3.1 应该就没问题了。

  不过即使使用了 -u 参数,也是指行缓存为 0,每当遇到一个换行符的时候才会输出。如果想在任意地方刷新缓冲区以达到立即输出的目的,需要在 print() 后使用 sys.stdout.flush()。(不知道还有没有更好的方法?)

  这里谈的是标准输出的缓冲,对于其他对象,比如文件,也会涉及到类似的输入输出缓冲的问题。

2
Posted on 上午12:50:00 by Fan Zhang and filed under

  今天我写了一个处理 Google Reader API 的 Python 模块,当我在其他程序中 import 这个模块的时候,第一次运行(在生成 pyc 文件之前)顺利通过,第二次运行就失败,显示如下错误:

Traceback (most recent call last):
 File "test.py", line 1, in <module>
  import readerapi
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 36-37: invalid data

  但是我尝试在 Notepad++ 中将文件编码进行改变:ANSI、带 BOM 的 UTF-8、不带 BOM 的 UTF-8,始终都是失败。

  后来我尝试把文件从桌面(这个路径含有空格和中文)转移到一个简单的路径,运行就没有问题。

  折腾了半天未果,怀疑是 3.0.1 有 bug,下载安装 Python 3.1 alpha 1 就好了=.=!

  

3
Posted on 下午6:40:00 by Fan Zhang and filed under ,

  Notepad++ 是一个开源的文本编辑器,功能强大而且使用方便。编辑和调试 Python 程序使用什么编辑器或者 IDE 不同人有不同见解。在不考虑使用调试工具的情况下,Vim 或者 Emacs 用户自然可以无视其他编辑器,不过在 Windows 环境下,使用 Notepad++ 之类的编辑器也是很好的选择。

  我是在 PortableApps.com 上下载的 Notepad++ Portable,它的好处是可以在每次关闭程序的时候把所需的配置文件单独保存,省却每台机器上重新配置的烦恼。

Tab长度和空格转换

  因为 Python 对缩进要求严格,我们将 Tab 设置成4个空格,在 "设置->首选项->编辑->制表符设置" 中修改。

语法高亮

  只要正确设置了扩展名,Notepad++ 就会自动识别语言并进行语法高亮。如果对高亮的颜色或者字体不满意,在 "设置->语言格式设置" 中可以进行修改。

自动完成

  Notepad++ 也提供了自动完成和输入提示功能,在 "设置->首选项->备份与自动完成" 中可以设置。Python 的自动完成所需的文件在安装的时候自带了,存放在 "YOUR_NPP_DIR\plugins\APIs"(详见官方FAQ:Auto-completion)。默认的快捷方式是 Ctrl+Space 和 Ctrl+Enter,可能和输入法的快捷键冲突,不过 Notepad++ 的所有快捷键都可以自定义。

运行程序

  点击 "运行->运行" (默认快捷键是 F5 ),在弹出的菜单中输入:

cmd /k C:\Python30\python.exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT

选择 "保存",就可以给这条命令设置一个快捷键并起一个名字,比如叫 "Run Python"。以后运行直接按自定义的快捷键就可以了。注意如果想修改这个快捷键,可以在 "设置->管理快捷键->Run Commands" 中修改。还有几点说明:

  1. 如果想修改这条命令,目前只能通过修改 shortcuts.xml 文件,这个文件保存在 Notepad++ 的配置文件中,可能在 Notepad++ 的目录,也可能在 Documents and Settings 下的 Application Data 内。
  2. $(FULL_CURRENT_PATH) 的含义是当前文件的完整路径,这是 Notepad++ 的宏定义,更多的相关宏可以参见官方FAQ:Run external tools。注意要用引号括起来,防止路径中间有空格。
  3. 直接执行 python.exe 在运行结束后窗口会自动关闭,所以要用 cmd 来执行。(在 Python 2.5 似乎有所不同,但是 3.0 需要这样设置。)
  4. cmd /k 的含义是执行后面的命令,并且执行完毕后保留窗口。& 是连接多条命令。PAUSE 表示运行结束后暂停,等待一个任意按键。EXIT 表示关闭命令行窗口。如果使用 cmd /c 就可以省掉 EXIT 了。

更多 Plugin

  因为 Notepad++ 支持插件扩展,所以可以使用很多有用的插件(下载页面有插件列表)。比如有一个插件:NppExec,可以在 Notepad++ 中增加一个 Console 窗口,使得运行命令和脚本更加方便。可以通过这个插件设置 Python 的运行命令。

  不过这个插件有个问题是只有程序运行结束了才会返回输出结果,这样就没法实时观察程序的运行了。不知道有没有好的解决方法?

2009-03-14Up:

  关于输出不及时问题,可以通过刷新 stdout 缓冲来解决。

2
Posted on 下午6:38:00 by Fan Zhang and filed under

  前几天决定尝试下 Python 3.0,安装的版本是 3.0.1。不出意外,原来的代码都不能用了。

  我想要修改的是使用 Python 登录网站中的程序,经过把 print 语句改成函数,重新查找标准库的用法,修改字符串的表达方式这些常规的修改,终于不提示语法错误了。

  不过我运行程序,却发现没有登录成功。经过调试,发现在发送登录请求的时候,编码出了问题。论坛需要 GBK,而 Python 使用 urlencode 编码得出的是 UTF-8。

  在 Python 3 中取消了原来的 unicode 类型,现在的字符串类型为 str,并且存放的就是 unicode 字符串。这样,在 Python 程序内部就不用为各种字符编码困扰了。现在使用字符串,只要保证在与外界交互,即读取(比如赋值、从文件读、从网络读)和输出(比如存储文件、发送信息)的时候使用正确的编码即可。但是这样也就造成原来很多程序都要重新写。

  字符串经过具体编码,就不再是 str 了,而是 bytes 类型。对一个 str 可以用个 encode 编码成 bytes 数据,而一个经过编码的 bytes 数据可以通过 decode 解码成 unicode 字符串。在 Python Docs: What's New In Python 3.0 : Text Vs. Data Instead Of Unicode Vs. 8-bit 中有详细说明。

  在读取文件的时候,默认是以 text mode 打开的,所以读取的资料直接可以存放到 str 字符串中,同时在 open 的时候可以指定编码系统。而如果文件不是文本,则需要在 open 的时候使用 "b"以 binary mode 打开。

  回到之前那个论坛登录程序,我使用标准库自带的 urlencode 将个人用户名和密码等参数进行 URL 编码,而由于 Pyhton 字符串机制发生根本变化,这个函数默认将文字(比如用户名是中文)按照 UTF-8 进行编码。而论坛需要的是 GBK 编码,所以造成无法登录。

  通过查看标准库相关的代码:Lib\urllib\parse.py 文件中的 urlencode 函数可以看出,它默认使用的就是 UTF-8,也没有提供可选的编码参数。所以要想实现 GBK 编码,只能放弃使用 urlencode 函数,直接使用 quote_plus 来编码。不过就要手动实现把编码后的参数用"&"连接起来了。

0
Posted on 下午10:43:00 by Fan Zhang and filed under

  如果在安装过程中选择了商用环境,那么 TeamViewer 安装结束后就是试用版,在使用一段时间后过期。

  因为 TeamViewer 的 ID 是根据包括 MAC 地址在内的硬件信息生成的,所以即使重装系统,依然会生成同一个 ID,那么原本是商用的 ID 在重新安装的时候就会跳过"Environment"这一个选择页面。

  从原理上,修改 MAC 地址可以欺骗软件认为换了一台机器,重新生成一个 ID,不过这个我没有尝试成功,我想可能是没有把系统已安装的信息清理干净,软件没有重新扫描硬件信息。

  下面介绍一个简单的方法,也是官方提供的,不过"隐藏"得比较深。

  在菜单上选择 Extras -> Your trial period,这个选项只有试用版才有,免费版是没有的。然后会弹出一个窗口,选择 extend the trial period,这个时候重新选择 I use TeamViewer for .. 下面的 personal,输入 Email 即可,最后那个 newsletter 的选项可以去掉,点击 continue 即可。

  其实这个网页为:

http://www.teamviewer.com/integrated/trial.aspx?ID=你的ID&IC=你的IC

  分析一下软件生成的日志文件可以知道这个 IC 相当于一个校验码,应该是先于 ID 在本地产生的。

  如果按照上面的方法,被告之验证错误,无法点击 continue,这个时候可能是服务器那边有问题,稍等刷新即可。

1
Posted on 下午4:45:00 by Fan Zhang and filed under

  Linux 下远程终端操作和本地没什么区别,但是 Windows 环境下就对远程控制/远程桌面软件有很大的需求。

  这类软件对网络环境的要求很高,比如在局域网内我觉得使用 Windows 自带的远程桌面最方便;对使用者也有一定的要求,在公网下最方便的应属 QQ 远程协助。

  我有一台机器处于教育网,一台机器处于不能修改路由设置的局域网,一般软件很难胜任这种"糟糕"的网络环境,经过试用,我觉得 TeamViewer(主页) 非常不错:

  • 使用方便,应用范围很强,可以说只要计算机能连上 Internet,就可以远程控制。
  • 个人非商业使用是完全免费的!
  • 提供免安装版(安装以后有更多的功能) 。
  • 有 Mac 版本。

  下面我详细介绍安装的过程,因为如果不小心把用户类型选择成商用,就变成试用版了,不太容易再改成个人版。

  从官方网站上下载便携版)后运行,我下载的是普通的安装版,进入第一个选择界面如下:

  第一项"Install"是将软件安装到计算机中,第二项"Run"相当于免安装,想立刻使用的可以先试试这项,没有管理员权限时也可以使用。注意,这里的免安装并不是便携,因为它仍要写注册表和配置文件。如果选择"Install",不妨把下面的高级设置选上,可以多设置一些参数。

  点击"Next"进入下一个页面,这一步选择非常重要。

  第一项"company"是指商业应用,选择以后软件就是试用版,有使用期限,过期可以申请延长和更改许可(但是我没有试过,只是看到菜单上有这一项)。而且一旦选定,即使重装系统安装的时候也不会再出现这个页面了。所以我们选择第二项"personal",这是免费的,而且功能也不少,只是在每次连接结束后会弹出一个提示你不能商用的窗口。

  这步不用多说,勾选上即可,因为上面选择的是个人非商用,所以这里第二项就是保证在本台机器上是个人使用。

  这一步是选择是否开机启动服务,对于要远程控制的机器,肯定是要选择随 Windows 启动。只有这样才能使用远程重启的功能。下面要求输入的密码就是远程登陆所需要的密码。当然,选择"Normal installation"之后也可以很方便的设置成随 Windows 启动。

  最后是询问是否安装 VPN,不知道这是什么的可以先不安装,之后在软件的选项中可以随时安装卸载。

  再之后就是常规的安装步骤,一路 Next 下去即可。

  安装完之后(或者在第一步点击了 Run),就可以运行了,保证计算机联网就可以获得一个九位 ID 和一个四位 Password,显示在"Wait for session"中,如下:

  这个 ID 是根据机器的硬件信息(这个信息至少包含了MAC地址)生成的,所以即使重装系统,ID 也不会变化。而四位的密码则是每次随机生成的,如果对密码进行了自定义,则会显示"Predefined"。

  如果另外还有一台机器也安装了 TeamViewer,在"Create session"中输入对方机器的 ID,并且经过密码认证,就会连接到远程桌面。

  连接上以后的设置就比较普通了,比如画面质量、远程屏幕分辨率、是否显示桌面等等。文件传输也非常方便。

  使用远程桌面的控制面板:Actions-> Switch side with partner,可以立刻切换控制和被控制的两端。这个功能也是非常有用的。当有的时候因为防火墙设置等原因(比如在使用 IP 直连时),可能会出现只有一端能连到另一端,但是反过来则因为被防火墙屏蔽无法连上,这个时候用切换功能就很方便。

  TeamViewer 允许在 ID 中直接输入 IP 地址,这在局域网环境中非常方便,但是注意要在 Options -> General -> Connection -> 勾选 Accept incoming LAN connections。

  当需要控制的机器很多时,要记住这些 ID 也是件麻烦事。申请一个 TeamViewer 的账户就方便多了,点击程序主界面下方的"Partner list"就可以注册和管理了。

  最后还有几点相关的内容:

  • 如何屏蔽使用 TeamViewer。因为此软件的穿透能力很强,对个人自然是好事,但是对公司数据的安全就造成了威胁。因为 TeamViewer 获取 ID 必然要连上自己的服务器,所以只要屏蔽这个服务器即可。
  • 关于数据传输安全,因为使用 ID 进行连接必定要在服务器进行数据交换(使用加密传输),所以这一步的数据安全只能依靠 TeamViewer 公司来保证了。在建立了连接后,应该就是两端直接相连了。
  • 有一个 CrossLoop 的软件功能和 TeamViewer 差不多,不过我用了一下,没连上...
  • 我看到一个十分详细的 TeamViewer 使用说明:Jackbin 的懶人筆記: 功能強大的遠端控制軟體 (2) - TeamViewer,从安装到注册到配置各个细节都有。文章的选项界面和我略有不同,应该是版本问题。
  • 如果不小心把应用环境选成了商用,改回个人免费版的方法见:如何将 TeamViewer 从商业试用版改回个人免费版
35
Posted on 下午3:29:00 by Fan Zhang and filed under ,

  本来,退订一个 Blog 是不应该单独写一篇的,不过月光博客如此知名,写写倒也无妨。我还记得,在月光博客上看到很多写作技巧类的文章,比如十个避免RSS订阅被退订的方法

  之前,我忍痛退订了 GSeeker(G速客),毕竟是换人了,关注内容和文章风格差异太大。

  这次,退订月光博客,我也考虑了很久,很早就有这个念头,因为这个博客的内容已经不再吸引我了。

  • 新闻类的文章:就内容来说,不是独家或首发,到处都能看到,就文章质量来说,仅仅是简单的介绍,没有深度的内容。(这让我非常怀念当前的 GSeeker,每篇文章都有自己的测试和见解。)比如说,讨论某次 Gmail 界面更新,我看的其他任何一个写同样内容的 Blog 都要比他的详尽。我感觉,仅仅是为写这个话题而写这篇文章,是为了搜索引擎优化吗?
  • 教程类的文章:现在几乎没有了。
  • 翻译类的文章:我现在也订阅原文出处的 Blog,所以这类文章对我而言没有必要了。而且,翻译的内容甚至还不如原文内容多...也很少很少有个人的补充和见解。
  • 时事类的文章:力度和深度都不够,对问题的分析不够透彻,感觉行文仓促。

  我一边写上面的文字,一边在想,我写下这篇的目的是什么。我想,主要还是对这个原本觉得不错的知名博客的失望吧。我猜测,很有可能是在写博客上面的时间投入不如以前多了。

1
Posted on 下午4:36:00 by Fan Zhang and filed under ,

  今天我的一台 Sony SZ28 笔记本在把音量调大的时候突然发出刺耳的啸叫声,就跟以前把麦克风靠近音响时的声音一样,调节屏幕面板角度,声音也会不同。

  的确是我没有把内置的麦克风(在摄像头旁边)静音造成的。这是麦克风和扬声器的自激效应。扬声器声音能量的一部分通过声传播的方式传到麦克风,又被麦克风放大而引起啸叫。这个问题在很多笔记本中都存在,Sony SZ 系列听说尤其明显。

  所以解决这个问题,有如下几种选择:

  1. 在音量设置里面将麦克风静音。
  2. 如果需要使用麦克风,并且没有外置的,则需要将麦克风音量调小,关闭高级选项里面的麦克风增强。
  3. 使用耳机或者外置的麦克风。

  出现这个问题不能说笔记本的设计不好,我觉得这种声反馈很难避免。而且越是高品质、高敏感度的设备越容易出现声反馈。

  当我们把麦克风静音的时候,并不是禁止麦克风接收声音,而是不让扬声器反馈麦克风的声音。事实上,静音状态下,麦克风还是正常工作,并且可以录音。

5
Posted on 下午10:14:00 by Fan Zhang and filed under

  话说,去年元旦我买了一个 8700,因为原来的 7100 在公交车上被别人拿走了。今年同样不顺...所以,我又买了一个 8820。

 

  本来想买 8320,不过没有货,我没有手机用又很焦虑...所以就选了 8820 先用。有 GPS 和 WIFI,挺好玩的。

  终于又有了拼音输入法,一开始还不习惯,总是打笔画。

  另外,点讯输入法相当不错!Anyview 还是选择了 3.2.12版本,最新的抗锯齿不好用,完全没法看,好在我有算号器,还能注册。

7
Posted on 下午8:29:00 by Fan Zhang and filed under , ,

  Google 已经放弃了我一直喜爱并使用的服务:Notebook。不仅如此,还有很多其他服务也不能幸免。

  尽管我购买了正版的 myBase、CyberArticle,我使用免费的 Evernote 还有 Firefox 的扩展 ScrapBook,但是 Google Notebook 作为 Google 的一项优秀的服务,我是从始至终关注并支持,多次提交反馈意见与 Bug 报告,可以说,我对这项服务是相当有感情的。

  今天不讨论经济危机对一个公司的影响,不讨论我这些数据怎么处理。

  我只是想说,为了节省开支今天关闭这个服务明天停止那项开发,到最后肯定能特别省钱,因为所有服务都没有存在的必要了 -- 用户除了逃离你 Google 还能有什么选择?

  以前有很多服务被关闭,都至少有一个看似合理的理由。比如 Google Answers,因为它的收费模式与网络精神格格不入;比如 Page Creator,好歹有个 Sites 代替。

  总之我是非常生气,对 Google 也非常失望!停止一项服务是小事,或许真的没有什么人用 Google Notebook,但是如此的态度却是让我难以接受。

5
Posted on 下午2:14:00 by Fan Zhang and filed under

  上次 Google 变换 Favicon 就引起了争议,毕竟用了很多年的东西突然变了总不习惯。

  结果这次变得更离谱,我看了很久很久才看出是什么玩意儿!

  官方 Blog 还有说明

3
Posted on 上午11:04:00 by Fan Zhang and filed under ,

  由国务院新闻办及工业和信息化部、公安部等7部委联合公布的首批"低俗网站"名单出炉。谷歌、百度、新浪、搜狐、猫扑、天涯等搜索引擎、门户网站和社区论坛网站均位列其中。

  我得承认,这些低俗网站有几个我还是经常上的,有的从来没听说过。不知道迅雷为什么没在里面,因为我在下载的空闲,总是会点击几个"推荐"的内容。

  搜索引擎很无辜,按理搜不到才是奇怪的,我就不信网上那么多图片都能给屏蔽了。我觉得在国内就不应该提供什么搜索功能,用个分类导航不就得了,顺便还解决了人肉搜索问题。

  根据主流媒体惯用词语中总结的经验,本消息出现了"7部委",所以问题很严重,所以各大网站都得赶紧出来道歉

  我在五、六年前就曾经投诉过网易社区的广告比较低俗,我记得当初处理很快,快到等我再次刷新的时候,我的举报帖子就不知道哪儿去了。我不知道新浪的体育新闻现在有没有变好一点,至少一年多以前还有很多色情小说

  哦,文章最后,按惯例,还是要表达对国家为广大网民净化网络环境的支持,希望能够在春节之前,各部门"严格执法,敢于碰硬,对在网上传播淫秽色情信息和低俗信息的不法分子,要依据有关法律法规和管理规定严肃处理。对屡教不改、影响恶劣的网站,要曝光一批、处罚一批、关闭一批,绝不姑息迁就"。

  曝光已经做得不错,我建议,处罚谷歌、百度、新浪、搜狐、腾讯,他们有钱。把什么网易、天涯一类的都关了,新闻看新华网、CCTV就够了,大过年的也不用上论坛。

0
Posted on 上午11:56:00 by Fan Zhang and filed under

  今天写 ActiveX 发现 Visual Studio 2008 里面已经没有了 ActiveX Control Test Container,查了一下,发现是从 2005 版本开始取消的。

  如果对这个工具念念不忘,似乎只能从旧版本里面提取了,或者下载旧版本的 SDK 里面的 Sample 重新编译。

  MSDN相关内容:TSTCON Sample: ActiveX Control Test Container

0
Posted on 下午11:59:00 by Fan Zhang and filed under

  之前用蓝牙往黑莓传文件的时候,经常遇到直接失败的情况,原因是文件太大。我一直很迷惑,因为我的内存还有空间,即使我清理了一些空间,不能发送还是不能发送。

  今天无意中发现原来是我的设置有问题,进入 Media,在这里有选项"Receive Using Bluetooth",我都是这样接收文件的。点开"Options",发现第一项就是"Device Memory Limit",我原本的设置是5MB,怪不得总传不过去。改成15MB(我的8700最大的选项就是15MB)就可以了。