技术

亲历索尼维修服务


很久以前买的 SONY 摄像机 19E 突然坏掉,回放没有问题,但拍摄就全部变形成绿色的竖条纹,简直可以免去后期制作直接开拍午夜凶铃。这摄像机自从泰国归来后就一直没有拍过,我只好将其归罪于北京最近糟糕的天气。

坏了总是要修的,先前已经有过一次去维修的经历,当时说开机检测费就要 200。现在只能怀着忐忑不安的心情,再次杀往位于魏公村的索尼北京技术服务中心

在经过漫长的排队后,客服 MM 看了摄像机的故障现象,说可能是 CCD 坏了,或者是什么其它的问题,如果是 CCD 坏的话可以免费更换,因为已知有一批 SONY 的老机器是有问题的;如果我可以等 20 分钟,就现场做检修,若确认是 CCD 问题,那么立刻就搞定,否则就等修好了再来取。然后很专业的卸下了我的电池,给我一张单子,上面注明维修机器的当前状态:"带 UV 镜和镜头盖,机身有划痕...",我签字确认以后就把机器包好送到了快修室。

索尼的快修室就在前台大厅的一侧,可以透过玻璃看到维修的全过程。于是紧张的看着维修人员很熟练的把我的 DV 大卸八块,焊下 CCD,然后再焊一个新的(或者也只能算良品),测试,哈,很快结论出来,果然是 CCD 故障,于是整套维修服务全部免费。

后来看我的维修单,收费情况是:配件费 105,维修费 220. 费用为索尼承担。在前台大厅还有一张今年5月出台的价目表,关于 DV 的费用是检测费 50,清洁、更换外围附件的人工费用是 250,维修的人工费用是 350;DC 相关的人工费用分别是 200/300。比较起去年维修 Nikon 4300 的经历,发现 SONY 的服务要透明优秀得多,怪不得柯美退出数码相机业务后,把自己的维修服务转包给索尼。从另一张说明上看,快修服务(针对 DC 和 DV)只提供到下午 3:00,确保当天就可以拿到修好后的产品;但我的摄像机去修的时候已经下午 5:00 了,可能是因为我的情况比较特殊吧,也不知道快修服务需要另加多少钱。

我是周六去的,我拿到的号是 177,等我走的时候已经有人排号到 200 了,4 个接待席在马不停蹄的工作。在我等待的1个多小时过程中,绝大部分是 SONY 电脑,其次是 DC、DV. 其它的我只看到一台电视和一台音响。仔细算算,感觉人们使用数码电子产品,维修率还是蛮惊人的.

说实话,本来我是有些鄙视 SONY 的 DC 产品的,可经过这么一次比较爽的维修过程后,感觉再买新 DC 也未必非 Canon/Nikon 不可。当然,从各种媒体上都能看到电子产品维修需要天价的维修费用,也包括索尼,说不定这次只是运气比较好而已.. 是不是以后 DC/DV 这类消费数码产品也会出现 DELL 那样的三年全保服务呢?

Topic: 商业 技术

Mantis始末

这个东东从最开始着手到现在好几个月了,昨天晚上总算差不多了。心中这个存在了几个月的疙瘩终于解掉了。

学习Mozilla/Firefox扩展的时候,需要看一篇很长的文档,频繁地上下翻动网页让我很不爽,想起以前看教程类的网页也出现过这种情况,于是想仿造Microsoft Word的页面拆分做一个实现此功能的Firefox的扩展。

这不是一个复杂的东东,实现最简单的功能的0.1版也在比较短的时间就做出来了,可是实现在拆分页面中跳转至锚点位置这酷酷功能的0.4版传到网上后,突然发现扩展中竟然存在影响Firefox正常使用的重大bug。研究后苦思不得其解,不得已从网上删掉了控制自动更新的rdf文件和扩展新版本且信心受到严重打击。由于对js不熟悉等等称不上理由的理由,bug一直没有修正。其间屡次鼓起勇气寻找解决问题的办法,总是不能达到目标。

每当想做个别的什么的时候,一想到这还有没完成的半成品,也没有心思做别的,告诉自己如有精力先把这个完成了吧。

这回又一次尝试解决问题,在哥哥的帮助下精确地定位了出现bug的地方,翻XUL的参考文档,偶有所得,目前来看应该算是修正了bug,有了一个可用的版本

感谢Lewis Lv的文档以及帮助,其他参考:XULPlanet.comMozillaZine Knowledge Base

Topic: 技术 网络

发现一个软件 Jokosher

不用我多说,看了这张图片就应该知道它是做什么用的了.

以前这类开源软件好像只有 Audacity (有 win32 下的安装包). 在 jokosher 论坛上有人批评 Audacity 对 MIDI 支持不够好..

总之,用 pyGTK 开发,采用 gstreamer 框架,这些都是我所喜欢的东东,所以 Linux 下玩音乐制作的朋友们,这里推荐一下. 哪天我也试试 remix 一个黄建翔解说 MP3. 嘿嘿

Topic: 技术

万里开源

我是在搜索 mysql 的一个功能的时候发现 mysql 居然有了官方的中文手册,然后顺藤摸瓜,知道这个手册是万里开源这个公司提供的。

从缺乏创意的名字,这个公司实在无法在第一时间内获得我们的尊重,但它却是 MySQL 在中国的金牌合作伙伴,真是让人大跌眼镜。在 google 上搜索,关于这个共创Turbolinux 合作产物的介绍是少之又少,首页也是很没有诚意的 "Under constructing....",直接输入 http://greatlinux.com 更是直接去了 turbolinux,不由得让人们对其是否能承担 mysql 金牌合作伙伴(可能还是中国大陆唯一)这一使命而心存疑虑.

但无论如何,对于中国现在如火如荼的以 MySQL 开始其基础架构的创业公司而言,现在有了一个可以近距离获得现场支持的可能,另一方面,这类基于开源产品的专业服务也是中国难能可贵的尝试。至少万里开源的血统还算高贵纯正,如果您确实在担心存储在 MySQL 中的数据有一天可能突然无法访问,那么可以考虑联系一下万里开源,看看他们的实力和姿态是否足以打动你们的 CIO。当然价格也是需要考虑的因素,MySQL 的白金服务也不过 5000$/Year,不晓得万里开源是怎么定义其服务项目和收费标准的。

虽然我得承认我个人并不喜欢它,但这里还是先为其鼓掌吧。

==================================================
后记:这样的写作风格是不是所谓的华尔街体

Topic: 技术

用免费工具 VC Toolkit 2003 编译 Mozilla Firefox 1.5

由于编译过程中需要生成的临时文件 xpidl.exe 要链接 glib 和 libIDL,对应 MOZILLA_1_8_BRANCH 来说,用 vc8 链接它们有些问题(Visual C++ 2005 Express Edition),需要的 patch 都在 trunk 里面。所以如果是编译 Firefox 1.x,1.5.x,甚至以后的 2.0.x 的话,最好还是用 Visual C++ Toolkit 2003

但另一方面,Visual C++ Toolkit 2003 是一个很不完整的开发平台,欠缺不少编译需要的工具和库,下面是我的编译环境配置过程,供参考:
1. 安装 Visual C++ Toolkit 2003,30兆安装包.
2. 安装 .NET Framework Redistributable Package version 1.1,20兆安装包(当然可能你的 XP 在升级过程中已经具备了这个环境)
3. 安装 .NET Framework SDK version 1.1,100 兆安装包
4. 安装 Platform SDK. 我半年前只有"Microsoft® Windows Server 2003 SP1 Platform SDK - April 2005 Edition",现在最新版是"Windows Server 2003 R2 SDK - March 2006 Edition". 我只安装了:
 Configuration Options(但没有安装 Register Environment Variables)
 Microsoft Windows Core SDK(Tools、Build Environment、Redistributable Components)
 Microsoft Web Workshop (IE) SDK(只安装了 Build Environment)
5. 安装 MASM32,半年前是 8.2,现在最新版本是 9。免费下载,3兆安装包。这包里面提供了 ML.EXE 和 DUMPBIN.EXE 是编译需要的
6. 下载 moztools-static.zip ,以及 vc71-libIDL-0.6.8-bin.zip、vc71-glib-1.2.10-bin.zip. 安装方法为:
 6.a 解压 moztools-static.zip 到 C:\moztools
 6.b 解压缩 vc71-libIDL-0.6.8-bin.zip、vc71-glib-1.2.10-bin.zip. 比如到 C:\vc71 目录
7. 安装 cygwin,除了缺省包以外只需要
 Devel 类别下选:patchutils, make 3.80 (not 3.81!)
 Interpreters 类别下选:perl
 Archive 列表下选择:zip, unzip

 安装完以后把 cygwin 环境里面的 link.exe 改个名字,因为路径上可能有冲突

基本上免费工具就这么多了,但是还是缺,需要 hack.....
1. VC Toolkit 2003 没有缺省带 lib.exe, 要获得有两个方法
 1.a 要么是安装 Platform SDK 的时候选择 Microsoft Windows Core SDK -> Tools -> Tools (AMD 64-bit) 来获取
 1.b 而我当时看到 64bit 就害怕,就自己创建了一个 lib.bat,内容为:
  link /lib %*
 然后修改 mozilla 关于 lib.exe 的相关配置
  修改 configure、nsprpub/configure,寻找 ""AR=lib"" 以及 ""HOST_AR=lib"" 的地方,修改成 lib.bat
  修改 security/coreconf/WIN32.mk,寻找 ""AR = lib"",修改成 lib.bat
 以上方法参考链接
2. 生成 msvcprt.lib (在 Cygwin 环境下..)。
 进入 ""C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin"",执行
  echo ""LIBRARY msvcp71.dll"" >msvcprt.def
  echo ""EXPORTS"" >> msvcprt.def
  dumpbin /exports msvcp71.dll | awk '{ if (FNR > 19 && $4 ) print $4}' | sed -e 's/\r//' >> msvcprt.def
  link /lib /def:msvcprt.def
  mv msvcprt.lib ../lib

 参考 链接

在 cygwin 自己的 home 目录下创建 .mozconfig
. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/my_firefox
ac_add_options --enable-optimize
ac_add_options --enable-crypto
ac_add_options --enable-static
ac_add_options --disable-shared
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-activex
ac_add_options --disable-activex-scripting
ac_add_options --disable-xpconnect-idispatch
ac_add_options --disable-accessibility

ac_add_options --disable-test

设置编译所必须的环境,比如创建一个 vc71.bat 文件
@echo off
rem --- Basic config, with VC7 libIDL files
SET MOZ_TOOLS=C:\moztools
SET GLIB_PREFIX=C:\vc71
SET LIBIDL_PREFIX=C:\vc71

SET CYGWINBASE=C:\cygwin

rem --- Clean slate start
SET INCLUDE=
SET LIB=

SET PATH=C:\;C:\windows\system32;C:\windows;C:\windows\system32\wbem;

rem --- Then prepend Cygwin path

SET PATH=%CYGWINBASE%\bin;%PATH%

rem --- Set VC7 compiler environment vars

CALL ""C:\Program Files\Microsoft Visual C++ Toolkit 2003\vcvars32.bat""
CALL ""C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd"" /XP32 /RETAIL

CALL ""C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\sdkvars.bat""

rem --- Add glib/libidl to build environment
SET PATH=%PATH%;%GLIB_PREFIX%;%GLIB_PREFIX%\bin
SET INCLUDE=%GLIB_PREFIX%\include;%INCLUDE%;

SET LIB=%GLIB_PREFIX%\lib;%LIB%

rem -- moztools comes last after glib/libIDL

SET PATH=%PATH%;%MOZ_TOOLS%\bin;C:\MASM32\bin

bash --login -i

最后执行这个 bat 进入编译环境,进入 mozilla 源代码目录,

 make -f client.mk build

如果编译过程中报告什么没有 comsupp.lib,可以打个 patch 让程序不去找它.
参考http://www.koka-in.org/~zophos/SideB/daytripper/index.rhtml?date=20050208
--- browser/components/build/nsModule.cpp.orig 2005-02-07 14:50:22.350250000 +0900
+++ browser/components/build/nsModule.cpp 2005-02-08 18:34:08.470375000 +0900
@@ -58,7 +58,7 @@
#include ""nsPhoenixProfileMigrator.h""
#include ""nsSeamonkeyProfileMigrator.h""
#if defined(XP_WIN) && !defined(__MINGW32__)
-#include ""nsIEProfileMigrator.h""
+//#include ""nsIEProfileMigrator.h""
#elif defined(XP_MACOSX)
#include ""nsSafariProfileMigrator.h""
#include ""nsOmniWebProfileMigrator.h""
@@ -89,7 +89,7 @@
NS_GENERIC_FACTORY_CONSTRUCTOR(nsProfileMigrator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSeamonkeyProfileMigrator)
#if defined(XP_WIN) && !defined(__MINGW32__)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEProfileMigrator)
+//NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEProfileMigrator)
#elif defined(XP_MACOSX)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSafariProfileMigrator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsOmniWebProfileMigrator)
@@ -136,11 +136,10 @@

nsProfileMigratorConstructor },

#if defined(XP_WIN) && !defined(__MINGW32__)
- { ""Internet Explorer (Windows) Profile Migrator"",
- NS_WINIEPROFILEMIGRATOR_CID,
- NS_BROWSERPROFILEMIGRATOR_CONTRACTID_PREFIX ""ie"",
- nsIEProfileMigratorConstructor },
-
+// { ""Internet Explorer (Windows) Profile Migrator"",
+// NS_WINIEPROFILEMIGRATOR_CID,
+// NS_BROWSERPROFILEMIGRATOR_CONTRACTID_PREFIX ""ie"",
+// nsIEProfileMigratorConstructor },
#elif defined(XP_MACOSX)
{ ""Safari Profile Migrator"",
NS_SAFARIPROFILEMIGRATOR_CID,
--- browser/components/migration/src/Makefile.in.orig 2005-02-07 14:50:22.787750000 +0900
+++ browser/components/migration/src/Makefile.in 2005-02-08 09:00:43.763625000 +0900
@@ -84,8 +84,7 @@
ifeq ($(OS_ARCH)_$(GNU_CXX),WINNT_)

DEFINES += -DPSTOREC_DLL=\""$(subst \,\\,$(WINDIR))\\system32\\pstorec.dll\""

-CPPSRCS += nsIEProfileMigrator.cpp \
- $(NULL)
+CPPSRCS += $(NULL)

endif

ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))

Topic: 技术

微软的免费 C++ 编译器

虽然已经有 CygwinMinGW 的 gcc/g++,但在 Win32 平台下,被广泛接受的还是 Microsoft 的 VC。而且 firefox、python 这样的重量级开源项目,win32 平台上的二进制版本,也仍然是用 VC 系列编译的.. 因为 VC 更加稳定.

在当今一片免费开源的潮流下,微软也为贫穷的程序员们提供了免费 VC 工具,先后是 "Visual C++ Toolkit 2003" 和 "Visual C++ 2005 Express Edition". 或者说 "VC 7.1" 和 "VC 8".

现在在 Visual C++ Toolkit 2003 的主页上,下载链接已经被去掉,转而劝告人们使用 Visual C++ 2005 Express。但实际上,VC 7.1 还是很有用处的,比如 Python 2.4 和未来 Python 2.5 的扩展编译都应该在 7.1 下完成。

这里提供一个下载使用 vctoolkit 2003 的方法,去 google 上搜索 VCToolkitSetup.exe,还是很有一些下载链接的... 它的 MD5SUM 为: 90d8b963ca196aa9855b2ca6c3174c14

计划下篇 blog 介绍用免费工具编译 firefox , sigh.. 还是很麻烦的. 大半年前试着编译了一下,然后顺手更新Mozilla developer center 上的中文版 Windows Build Prerequisites. 好像国内在 win32 上编译 fx 的很少很少的说.

Topic: 技术

最近做的事情

由于下决心不在新买的这台 R51e 上安装没有许可证的软件,所以也就没有了 outlook,因此我的手机也无法和 PC 同步了。

本来对于 Ericsson/SonyEricsson 的手机而言,有一款 FMA 是不错滴,可是它对中文的支持有故障,同步的地址本会丢失,于是只能自己动手了...

最终计划是用 Python 完成一个能和 ThunderBird 同步的程序。近两周来课余时间一直在尝试,完成的东西包括:
1. Python 的 irda socket patch. 目前已经能在 win32 下工作的很好,还特意加入了 python-dev 邮件列表,结果有些受打击——python 2.5肯定没戏了,看 python 2.6 会不会有维护人员对这个特性感兴趣吧
2. 基于 irda socket 的 irda 类
3. 实现 obex 协议的 obex 类,目前包括 connect/disconnect/get
4. 定义了一个承载 obex 的传输层接口类,以及从它继承来的 irda 的实现
5. 正准备开始实现 IRMC-SYNC, 基本协议已经了解七七八八了,感谢某牛人翻译的资料
6. 开始研究 sqlite,计划先实现 phone 和 sqlite 之间的同步再说.

对于 oo 我可以说完全是一个白痴,这次是第一次用类实现比较复杂的结构,战战兢兢,也没有信心把这个东西的源码给别人看 :)

关于手机同步研究到这里,已经感觉有些吃不消了,还有一个及其麻烦的操作 thunderbird 地址本的问题,以及最终的 GUI 操作界面.. 估计整个七月都搭进去了. :(

Topic: 技术 生活

在 windows 下通过 python 访问红外设备

打算尝试一下和手机作同步,在 Windows 下开发,语言显然只能选择 Python 了。首先下载了 fMA 的源代码(它是用 Delphi 写的),找到可能和 Irda 相关的文件,仔细看了看它的代码和注释,然后又从注释里面找到了 MSDN 关于红外编程的链接

查找 Windows 下开发方法的同时也参考了 MultiSync 中关于红外部分的代码。现在可以确认无论是在 Linux 下还是在 Windows 下,操作红外 IrCOMM 都是通过 socket 完成的,下面展示一下 win32 获取红外设备列表的代码。

  1. from socket import *
  2. from struct import *
  3.  
  4. #imports from WIrCOMMSocket.pas
  5. SOL_IRLMP = 0xFF
  6. IRLMP_ENUMDEVICES = 0x00000010
  7.  
  8. DeviceInfoSize = 29
  9. DeviceList = []
  10.  
  11. IrdaSocket = socket(AF_IRDA, SOCK_STREAM)
  12. IrdaInfo = IrdaSocket.getsockopt(SOL_IRLMP, IRLMP_ENUMDEVICES, 1024)
  13. DeviceNum = unpack('i', IrdaInfo[:4])[0]
  14. print DeviceNum
  15. DeviceListInfo = IrdaInfo[4:]
  16. for i in range(0, len(DeviceListInfo), 29):
  17.     DeviceInfo = DeviceListInfo[i:i+29]
  18.     DeviceInfo = unpack('i22sccc', DeviceInfo)
  19.     DeviceList.append(DeviceInfo)
  20.  
  21. IrdaSocket.close()
  22.  
  23. if len(DeviceList):
  24.     print "DeviceID  :", DeviceList[0][0]
  25.     print "DeviceName: " + DeviceList[0][1].strip('\x00')
Topic: 技术

班车是队还是栈?

一般来说,班车都是只有一个门的巴士(除司机的门外)。从外型上看,这是一个典型的栈。可它真是一个栈么?

就我的经验,班车来后,下面的人鱼贯而入,先进车门的为了先下车,会挑选靠近车门的位子坐。这样,班车从实际的功能上看,它就成了一个队!

当人太多车上座位不够时,会有一批人站在车里,那么下车时,站着的人当然不是后入后出,所以这时候班车就成为了一个混合栈的队,或着说是一个混合队的栈。

人真是一种可爱的动物,可以把一个本来是甲的东东硬生生的做成乙。

呜呼,为什么会这样?套用btsb的结尾方式,这个现象告诉我们,什么事物只要人掺乎进来了,那就复杂了,人越多,越复杂。

Topic: 技术 社会
订阅 RSS - 技术 | BT的花