4月份换到新的公司,5月初公司换了个新的笔记本Thinkpad E440,于是卖掉原有的Acer AO522-C6Ckk。今天终于发货给买家了。细数这段日子(从2011年12月6日至今),原来经历了我人生的三个阶段————男朋友、丈夫和父亲。

当初入手AO522,是看中了AMD APU C60集成高性能显卡Radeon HD6290的优势,而且传说中很省电。最重要的是,屏幕是10.1吋,分辨率达到1280x720,同尺寸的屏幕中,分辨率最高,而且方便携带。后来发现,电池也就4个小时多一点吧,体积还是有点大,放小包里还是有点勉强。不过总体还是挺满意的。

AO522主要还是用来看电影,但是要换上Ubuntu 12.10后,才能流畅播720p的电影。跟豆丁拍拖时,吃饭或者吃cake时一起看电影,是最主要的节目。印象比较深的是《春娇与志明》、《3 idiots》、《独裁者》,因为太搞笑了。去旅游也带上了,但真正发挥作用的是,公司组织的旅游,接到房间的电视机看电影。去海南那次,回来时飞机晚点,AO522就在候机室满足了N个人的娱乐————播电影的同时,给手机、平板充电。

由于入手AO522后,台式机都送给锋表哥了。于是AO522成了主要的个人装备了。装上Ubuntu是必然的,然后学习过PHP,用CodeIgniter开发过小网站。装上Eclipse,还开发过Android小程序。还帮豆丁的HTC Incredible S解锁、刷系统和获取Root权限。渐渐适应了这家伙的移动性,还习惯了不关机,直接合上屏幕进入挂起模式。婚前还经常下班后,一个人坐在千禧广场,偷着i-Cafe的WiFi上网。还有考车牌时,用来看教学视频和做笔试练习。

结婚时,整纪念标志、电子请帖,也是用AO522。那时认识了Inkscape这个画图软件,也尝试了用Javascript代替Flash制作动画效果。

现在用着E440,AO522就显得多余了。毕竟背着两个笔记本上班是很辛苦的事情。还有一个原因是,现在的平板已经发展得足够好了————8小时续航时间,数量庞大而且轻易获取的应用程序,足够的娱乐性能,超高的屏幕分辨率,更加轻薄的体型,便宜的价格。那么,夹在高性能笔记本和平板之间的上网本还有什么生存空间呢?

对比上一个“二奶”,这次没那么伤感。或者一切都来得那么自然,而且用着AO522的这两年多,我已经不是一个人了。

2013年1月10日到15日,去了云南度蜜月。感觉太棒了!云南确实是个好地方,跟别的省区别很明显,而且各个市都有各自的特色。换电脑时,找到当时写的路线总结,于是记录到这里吧。

旅游计划:
1)2013年1月10日飞往昆明,当天夜晚火车到大理
飞机(已订):东方航空 MU5742 16:00~18:25 434元+50+130
航班起飞前一天16:00到航班起飞前2小时预订座位:
http://www.ceair.com/OnlineCheckin/init/home.shtml

昆明长水机场到火车站全程30公里,打车100左右,选择机场大巴吧。

火车K9636 23:39~07:05 软卧 127*2-5=249
订单号:E291976101

2)1月11日大理一日游,夜晚在大理古城过夜(火车站到古镇 8号公交)
古城住宿:
大理古城皇后客栈
订房电话:13388725255 0872-2517878
地址: 大理古城玉洱路232-1号8路公交古城专线叶榆路站下

1月12日大理去丽江,火车两个半小时
车次K9627 9:27--11:59 硬座29*2=58
订单号:E209776099

3)1月12日丽江,丽江古城、束河古城,住两晚
住宿: 旅人驿站 2楼纳西风格大床房(130元/晚) 电话13688780681 0888-5186518 网址:www.farerinn.com

1月13日
丰闲居客栈
http://kezhan.trip.taobao.com/item.htm?item_id=16326937745&spm=a1z10.5.4002-61404119.14.EiXUJw

1月14日丽江去香格里拉坐大巴(丽江客运站 票价47)

4)1月14日香格里拉,过一夜
住宿:
香格里拉烟雨阳光客栈
商家电话:13988799460
商家地址:独克宗古城东廊20号(原金龙街57号)
http://kezhan.trip.taobao.com/item.htm?item_id=7723679486&spm=686.1000925.1000774.6.qx34Y9

1月15日香格里拉到丽江 坐大巴

5)1月15日返回昆明,飞广州
丽江飞昆明 飞机 23:20--00:10(1月16日凌晨到昆明 航班:KY8260)
昆明飞广州 飞机 8:00--9:45(航班:MU5731)

通过一晚的测试与实验,终于用YUMI,把Android-x86 4.4.2 RC2装到U盘上,并且启动成功。记录一下吧:

1)打开YUMI并选择U盘,Step 2选“Try Unlisted ISO (via SYSLINUX)”,Step 3选ISO文件,如“android-x86-4.4-RC2.iso”。然后就等待YUMI自动处理完成。

2)进入刚弄好的U盘,找到文件 X:\multiboot\android-x86-4.4-RC2\isolinux\isolinux.cfg 并用编辑器打开。修改 kernel 和 initrd 的路径前缀为 /multiboot/android-x86-4.4-RC2 。具体修改后的文件内容如下:

default vesamenu.c32
timeout 600

menu background android-x86.png
menu title Android-x86 Live & Installation CD 4.4-RC2 
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffff00 #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ffffff00 #ff000000
menu color hotkey 7 #ffffff00 #00000000

label livem
    menu label Live CD - ^Run Android-x86 without installation
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 quiet SRC= DATA=

label vesa
    menu label Live CD - ^VESA mode
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 quiet nomodeset vga=788 SRC= DATA=

label debug
    menu label Live CD - ^Debug mode
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 vga=788 DEBUG=2 SRC= DATA=

label install
    menu label Installation - ^Install Android-x86 to harddisk
    kernel /multiboot/android-x86-4.4-RC2/kernel
    append initrd=/multiboot/android-x86-4.4-RC2/initrd.img root=/dev/ram0 androidboot.hardware=android_x86 video=-16 INSTALL=1 DEBUG=

PS. Android-x86项目越来越完善了,非常适合上网本安装。但要注意驱动的问题,特别是无线网卡!

4月中,终于换了个公司,重新投入到软件开发的行业。公司给我配置了个笔记本,Thinkpad E440(等了一个月才拿到手),于是今天装上Lubuntu 14.04。

安装过程比以前的台式机、前两个笔记本,都简单。iso文件用YUMI弄成启动盘,然后就图形化界面中点“下一步”。然而问题总是出现在安装之后的配置过程,比如内核没带该网卡的驱动,自带了很烂的iBUS输入法,任务栏没显示音量控制图标,大量的软件需要重新安装配置等等。直到写本文时,还没弄好。

过程中,突然感慨,好像我就一直在用Linux,都只停留在系统安装和软件设置上,没弄出个像样的东西。例如,昨天同事问我Linux中如何把禁掉的端口打开,我都没想到用iptable处理。

换上第3个笔记本了,希望能继续努力~

折腾RaspberryPi已经一段日子了,期间还因接错GPIO的线而报废了一个。重新入手了英国版后,却没再怎么玩了。

昨天搜索相关资料时,找到一个很简单的关机按钮方法(http://spaceblogs.org/flipdot/2013/06/shut-down-your-raspberry-pi-on-button-press-and-add-reset-function/)就是利用2.0版新增的P5接口,直接连上个开关,实现关机功能。根据该文章,还可以直接在P6上连个按钮,实现重启。

RaspberryPi针脚相关的资料,可以参考:http://elinux.org/RPi_Low-level_peripherals

今晚测试了一下,该方法可行。然后就是折腾了整晚的钻孔……还是入手个小电钻吧。期待明天可以接线。

PS。关机按钮的作用是保护SD卡,以免强制断电关机后,发生数据损坏或丢失的情况~

记得刷上Android 4.0之后,想过为什么系统自带了流量监控功能,还要装个监控流量的软件呢?系统自带的流量控制,最大的缺点是不能把流量统计情况显示在桌面上。于是想做个Widget,直接显示系统统计的流量情况。一直拖到上几个星期,终于开工了。但是,面临着一大堆问题……

首先是API。Android统计流量的API都是系统不开放的,就是带了@hilde的类、属性、方法等。

方案1:直接源码编译。首先想到是把android framework的源码下载下来,重新编译成jar包。问题是,CM提供的源码(http://github.com/CyanogenMod/)可能跟Android SDK的对不上。而采用SDK自带的源码,又不能编译。于是直接否决此方案。

方案2:采用Java的反射(Java Reflection)。比编译源码简单多了,什么类都可以拿来用。但是,要写一堆try catch代码,太麻烦了!

方案3:反编译虚拟机上的jar包,即把已编译成dex的jar还原成JVM的jar。由于虚拟机上的jar已被odex化,所以还要先合并。
1)用smali把odex文件转化为dex文件(smali项目:https://code.google.com/p/smali/)。
2)用dex2jar把dex文件转为class文件(dex2jar项目:https://code.google.com/p/dex2jar/)。
3)把class文件打包,并替换SDK上的platforms/android-17/android.jar文件。
这样就可以只用系统的所有api了。但是有个问题,就是system权限的问题未解决。要获得system权限,必须要获得rom的签名。就是说,只能放到rom里面,不能做成通用的软件。

所以,这个项目就研究到这里,然后无限期的暂停了……

在G1时代,入手了蓝牙耳机之后,就一直想把蓝牙耳机当成无线快门来用。虽然很屌丝,但是很实在的一个功能,特别是当年还一个人到处乱逛。

这几天终于启动这个项目。一开始的想法,肯定是参考一些音乐播放软件,利用BroadcastReceiver接受蓝牙耳机的按键事件,再广播一个Camera按键事件,实现从蓝牙的“播放键”到相机的“快门”的动作转换。但是,静态注册了BroadcastReceiver后,不起作用,怀疑是受其它音乐播放软件的影响,但也查不到原因。

后来灵机一动,想起直接修改Android的按键影射文件,把“播放键”直接改成“快门键”。于是修改 /system/usr/keylayout/AVRCP.kl 文件,把 key 200 MEDIA_PLAY WAKE 中的 MEDIA_PLAY 替换成 CAMERA。连上蓝牙后,测试通过,但还有个问题,就是相机不会先自动对焦后拍照,而是直接就拍照。然后就是写个Shell脚本(主要是sed命令吧)来自动修改影射文件。再然后就是写个app来实现这个功能了。当然,这是后话,希望不会成为屁话……

后面还有个想法,通过老G1来自动拍照,上传到服务器,实现监控功能。好吧~继续努力~

今晚,又被阿华拉去“旧车站”喝咖啡,聊聊天。本来跟平常一样的晚上,发生了个小插曲。阿华点了杯冰咖啡,想先喝杯冰水,却被服务员一再拒绝,理由是冰咖啡不送冰水。我望着整个柜子,满满的冰粒,心里纳闷:一杯不怎么值钱的冰水,有那么要紧吗?

记得有个晚上,跟阿华找地方喝点什么,就进了“旧车站”。当时我点了杯柚子蜜茶,阿华的是“意式”。聊着聊着,看到老板在煮单品,于是跟老板聊起了咖啡的事情。不一会,咖啡就煮好了,老板说这是烘培过度的咖啡豆,来自苏门答腊岛,并递给我一杯,让我尝尝。很香,味道浓郁,并从喉咙里散发出一种很甘的感觉,余韵久久不能散去。第一次遇到这么棒的口感!第二天,阿华告诉我,那意式使他一夜难眠,那味道也回味了一夜。从此,我一直在“旧车站”寻找这种单品的味道,阿华也只钟情于那一小杯意式。

从跟老板聊天,到品味那杯苏门答腊,再到一夜的回味,整个过程都很悠闲、随意、舒适!要表达出来的话,就是一种服务,或者氛围,甚至是咖啡馆的文化。很喜欢这种感觉。

类似的事情,在星巴克也遇到过。当时刚推出VIA速溶咖啡,于是买了一包“意识烘培”口味。结帐时, 跟服务员聊起这个新产品。她说,意式的味道比较Strong,要不试下“哥伦比亚”(当时就只有这两个味道)。并送了我一小包“哥伦比亚”。深深感受到星巴克的服务员都很nice。这就不是一个纯粹的买卖,而是在跟客户的简单交流中,让客户感受到一种关怀。当然送个小东西只是一种小手段,重点是能够很好地留住客人。这是我当时很喜欢星巴克的原因,即使咖啡很贵,而且再也没有送VIA给我。

还有一次是到云南大理旅游,在一个专卖咖啡的店,跟老板聊起当地的咖啡豆。聊着聊着,老板就煮了杯当地最好的“金峡谷”让我尝尝。虽然咖啡的味道不是特别喜欢,但是跟老板友好的交谈和看到他非常用心地炮制这杯单品,于是买了点回去。而那杯标价30块的咖啡,老板也没收钱。就像找到知己一样,所作的不是交易,而是一次难忘的偶遇、愉快的经历。

所以,今晚那杯喝不到的冰水伤了一个老顾客的心,也破坏了那种悠闲、随意、舒适的文化。

今天突然发现“二奶”上装的Windows7被错误格式化了,于是想办法重装。折腾了一个晚上,直到11点半,还没搞好。

其实只要用个WinPE启动盘,备份一下C盘的MBR,再用个Ghost装上新系统就完了。但是手上没有WinPE的可启动U盘,也没有能够在Linux上能够使用的制作工具。当然,用过WINE,也用过KVM上运行的WinXP,都不能很好地访问U盘。也折腾过用YUMI制作的启动盘,但不懂其menu的设置,手动添加的iso文件不能启动。最后放弃,只好明天回公司再弄。

洗澡时,不禁在想,其实装个Win7还有没有意义?Lubuntu已经很好地满足我自己的需求了,Chromium、MPlayer、Eclipse、Nginx、PHP等,都能满足日常开发和娱乐的需求。网上支付的话,建行的小额支付,可以用手机验证。至于游戏,WINE能够运行一些经典的游戏,还有手机也能玩一些好玩的。至于那些“大作”,早就没心思去“折腾”了。何不借此机会,把Windows铲除干净?

还是先睡吧~过了明天,就是周末了~

PS.发现近来特健忘,看来有必要开发个任务备忘的手机软件!

首先PHP没有自带定时器(例如每隔几秒自动执行一下某函数)。要实现这个功能,只有三个方法:1)利用外部脚本实现定时执行;2)利用客户端的JavaScript定时执行;3)根据访问请求来实现,但前提是网站的访问量足够大。利用外部脚本实现定时执行,只能是使用虚拟主机或者自己架设服务器才能使用(在虚拟空间上运行,就只能考虑使用JavaScript)。

网上搜到的资料,用PHP页面也可以实现定时器的。主要思路是使用死循环,再加延时执行(即sleep或者usleep函数)。相关示例代码如下:

//------------begin file: timer.php------------
<?php
//每半秒执行记录一下当前时间

//写文件函数
function write_txt() {
    $filePath = 'timer_test.txt';
    if(!file_exists($filePath)){
        $fp = fopen($filePath, 'ab');
        fclose($fp);
    }
    $str = "\r\n" . date('Y-m-d H:i:s');
    $fp = fopen($filePath, 'ab'); //a为打开文件后指向文件末尾,b为以二进制打开文件
    fwrite($fp, $str);
    fclose($fp);
}

ignore_user_abort(); //即使关掉浏览器,PHP也可继续执行
set_time_limit(0); //不设置脚本超时时间,可以无限执行下去
$interval = 30; //时间间隔为30秒
do{
    //定时执行的代码
    write_txt();
    sleep($interval); //等待,sleep的参数单位是秒,usleep的参数单位是毫秒
}while(true); //死循环
//------------end file: timer.php------------

执行时还有个问题,用浏览器打开运行后,网站的其它连接都卡住且不能打开。网上搜到的解析是,PHP不支持多线程。最后只有在服务器上,用以下命令运行:

php timer.php &