0
Posted on 17:58:00 by Unknown 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 17:44:00 by Unknown 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 Unknown and filed under

  已经不是什么新闻。

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

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

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

0
Posted on 03:47:00 by Unknown 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 00:57:00 by Unknown 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 00:50:00 by Unknown 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 18:40:00 by Unknown 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 缓冲来解决。