@kcome talks

Aug 07

“输入助手”v0.1

如果只想看一条tweet长的内容

“输入助手”(TISPal)今天发布v0.1。此次第一个发布版本仅有一个功能:记住每个应用所使用的输入法,在用户切换到某程序时,比如用CMD+TAB,自动切换到上次离开该程序时的那个输入法。也可以说让你获得类似Windows系统的输入习惯。 下载 http://j.mp/pRHbfI

如果还可以听我罗嗦更多

三到四个月前我第一次用Mac OS X 10.7 Lion Developer Preview,当时还没有装QIM输入法,就用了Lion自带输入法,因为速度并不慢,选字方式一下子就习惯了,还有最吸引我的Apple集成的颜文字,我就决定在10.7发布后只用Apple官方中文输入法不再安装第三方输入法,主要是洁癖因素和个人喜好。

但是QIM或者说其他输入法中有一个我非常需要的功能Lion自带拼音输入法没有,那就是“Silent for applications…”,即:在某些应用程序中关闭输入法。像我这样经常用Terminal进行操作的,一边用拼音输入法发完中文tweet,一边又回到Terminal删除文件,这个时候就特别需要这个功能了。刚在10.6雪豹装好QIM的时候,我就第一时间设置了某些程序中不使用拼音输入法,我一直认为这是一个非常有用、常用的功能。

因为不可能期待Apple开发这样的功能,并且经过简单研究发现控制应用程序中切换为特定输入法可以用Carbon框架中的函数实现。我就决定开发一个小工具实现这样的功能。

拖着拖着,拖到了Lion发布了,学Cocoa和Objective C对我来说也就是近一两个月的事儿,所以今天才有v0.1见人。程序可能还有些bug,我自己也从今天开始使用这个程序,写此blog之前也没有经过什么测试,所以如有问题可以在twitter.com/kcome , github.com/kcome/tispal 或者这里向我提出,我会尽力修正,并提供大家喜欢的需要的关于输入法管理和控制方面的功能。从简短介绍大家也看出来了,其实我最初希望获得的“Silent for applications…”功能并没有在此版本中实现,但是如果今天这个v0.1版本所提供的功能能够运行正常,通过用户的检验的话,那么特定程序锁定输入法的功能其实也近在眼前了。

最后再提两点,第一,本程序是开放源代码项目,所有代码可以从 github.com/kcome/tispal 获得,代码发布遵从Mozilla Public License许可证。这样的一个原因是输入法属于敏感部件,对安全性有要求的童鞋们可以稍稍放心一些。第二个是,程序图标是我自己“用极简陋方法”画的,如果对此有不喜欢或不适,欢迎投稿:)

谢谢观赏,欢迎留下您的看法:)

Aug 04

AppleScript实现VPN自动拨号

从这次开始,把一些技术技巧记录也写在blog里,否则对我这种写博拖延症来说,保持一定频率真太难了。。。拖延症其实都是coding或者干活强迫症造成的,干活强迫症有点让我其他什么都进行困难了。。。废话少说,正题开始,这是一个条件略有复杂和奇特的case,需求可能有些和别人的不同,之前没有搜到特别完美的方案,就把自己的脚本以及折腾过程记录下来。

需求/条件约束

连接过程

全程仅用Autormator里添加一个“Run AppleScript”任务,任务中有不少“do shell script xxx”的语句调用命令行工具。代码如下

on run {input, parameters}
  set REMOTEIP to do shell script ¬
  "curl -s http://11.22.33.44:8080/showip | grep -Eo \"([[:digit:]\\.]+)\""
  do shell script "sed -i -e \"s/.* remoteIP.local/" & REMOTEIP & ¬
  " remoteIP.local/g\" /etc/hosts" with administrator privileges
  do shell script "dscacheutil -flushcache"
  do shell script "route -n add -static " & REMOTEIP & ¬
  " 192.168.2.1" with administrator privileges
  tell application "System Events"
    tell current location of network preferences
      set VPNservice to service "VPN NAME IN SYSTEM PREFERENCES"
      if current configuration of VPNservice is not connected then
        connect VPNservice
        repeat while current configuration of VPNservice is not connected
          delay 1
        end repeat
      end if
    end tell
  end tell
  do shell script "route -nv add -net 192.168.0.0/24 10.0.0.2" ¬
  with administrator privileges
  return input
end run

其中“¬”是OPTION+ENTER/RETURN,只是将太长的单行语句折行方便显示用的。

注记

curl -s http://11.22.33.44:8080/showip | grep -Eo "([[:digit:]\\.]+)"

因为暴露远程网络IP地址的静态页面显示的并非一个单独的IP地址,这里用grep把其他无用信息过滤掉,将被扒光的IP地址付给变量REMOTEIP

do shell script "sed -i -e \"s/.* remoteIP.local/" & REMOTEIP & ¬
" remoteIP.local/g\" /etc/hosts" with administrator privileges

我再解释一下上面这行。因为远程网络的IP地址不固定,而Mac OS X里PPTP VPN的目标IP地址目前没有找到好方法用命令行或AppleScript修改,所以这里采用的方法是填写一个本地主机名“remoteIP.local”,然后在 /etc/hosts 文件中写入 “11.22.33.44 remoteIP.local”,这样就避免了在AppleScript或命令行下修改VPN连接目标IP的需求。这个方法虽然有点迂回和龌龊,但是其他更便捷的方法还没发现。缺点还包括每次连接vpn都要修改hosts文件,洁癖表示接受起来鸭梨略大。

route命令是让VPN连接走指定网关的。我是一开机即连上美国VPN的并设置为全局路由,而这里又希望连接办公网络的PPTP VPN不经过美国VPN,就指定了直接从网关经过。

下面的VPN连接代码应该是很容易可以google到的,到处都有解释这里就不多说了。

注意一点是如果命令行操作需要sudo,只需要去掉它并在do shell script “bla bla bla”后加“with administrator privileges”即可。虽然简单的东西也找了挺久,不知道是我不会找还是AppleScript文档比较囧。

其他就没什么了把。先到这里吧:)

Jul 05

商业拉锯,世界大同

一两周前,据说是迫于压力,当地政策为借口,Apple开始在台湾进行App Store下载产品可以在7天之内享受退款的销售政策。这已经不是新闻了,不过今天晚饭回来的路上,想到了这个问题。其实还有一些流言与之遥相呼应,就是Google在面临和Apple同样的压力时,选择了抗拒,不妥协。至于是否会有什么后果发生在Google身上,以及这两家的对比或评论,都不是我想说的重点。我想到的问题是,为何只有台湾这个地方,实施着如此苛刻、严格的消费者保障策略,而对于Google和Apple这样的国际公司,运营国际市场的一致策略,难道他们在向台湾妥协之前是在欺压消费者么?

可能我们听说了太多的,“本地特色”、“族群习惯”,种种理由也好,借口也好,甚至是背后的猫腻,黑暗且复杂的利益关系。但是我觉得在一个充分自由竞争,有适当监管的市场环境下,过分的行政干预施加于商业甚至于技术当中,都是不合适的。过分点的话,举极端的例子,App Store这种智能手机应用开发和消费产业,我想大家都会认为最发达的国家是美国吧,美国的消费者都没有觉得当今的退款政策有何不妥,那台湾的监管部是如何评判台湾消费者是无法接受比7天要短的退款期呢?台湾消费者和美国消费者有哪些不同,促使了这样的政策必须得以贯彻呢?下面还有一个反面的例子,比如说中国大陆有中国大陆的国情,一党专政的局面促使App Store的内容需要被管制,而这样的干预是哪怕台湾监管机构也明白其利弊的吧。

综合来看,自由贸易和市场经济,消费者和商家的拉锯,竞争商家之间的拉锯,依然是社会进步和世界发展的最主要动力,而违背这样规律行进的行政政策,将对产业甚至更大层面带来损害。

Jun 23

不知是巧合还是~~~

不知是巧合还是~~~

Jun 07

Apple and Developers

6月6号的WWDC确实震惊了不少人,从大家的tweets里,我感觉这次WWDC给的料,尤其是iOS5的部分,是最近两年来最“稠”的了,我发的一条推说的看法就是:“新iOS5让消费者越来越尖叫,竞争者越来越头疼,开发者越来越挠墙”。你可以从大家的反馈感受到iOS的功能升级是多么显著,此次可以说是过去几次iOS升级中功能增添最多的一次了,这也得益于竞争,没有Android和WP7的追赶iOS也不会以大家不敢想像的速度发展下去。

当然,最具争议的一个热点就是:Apple的许多动作抢了开发者的饭碗,或者说非常大程度的影响了开发者的信心,增加了许多对App研发和投入资源的风险。一时间,类似Marco的shit,各种骂声四起⋯⋯ 不过我还是从另外一些方面觉得Apple抢开发者饭碗这样的事情,并不会如大家想得那么糟糕。下面是由此想到的几点

可能还有其他方面的想法,暂时先说这三个吧。

UPDATE:

May 22

药家鑫判刑中想到的

昨天锐推了Cocoaye的一条tweet,内容是:

全民喊杀药家鑫,我觉得这也从某一个角度反映出了我们这个民族阴冷的性情,我们对生命是非常轻视和蔑视的,对于我们而言,有太多的理由可以让我们理直气壮,堂而皇之的去抹杀一个人的生命,从这个角度讲,其实我们全民都是药家鑫。

其实我也对“全民喊杀”是感到不舒服的,只是因为我没有去了解案情、事情的前因后果,没有说什么。在当今信息爆炸的环境下,我总有一种信息恐惧症,我觉得一件事情,尤其是被热炒和本身就很热的事情,很难去非常客观了解其真实状况。不过我依然这两天想到几点,写下来记录一下。

  1. Cocoaye的tweet以及我表示的同意,其中最大部的原因是,药家鑫即便做了十恶不赦的事,也是要经过法律程序,即便是判处死刑也需要符合“程序正义”,所谓法律面前人人平等,法律判决不受哪怕民意的影响,这是最重要的。同样,杨佳和马加爵也应如此。

  2. 下面就到了比较重要的民意。我的倾向是,民意可以表达对重大罪恶的愤怒,哪怕是不理智和稍有野蛮的情绪。但是这些情绪,一不能过分,不能天天讲人人讲,二来不能超越前面所说的“程序正义”的重要。如果没有这些,那这个社会是“未开化”的,距离文明社会还有很大的距离。

  3. 第三点针对第二点,为何民众,如此多和如此深度地表达“野蛮”、“不文明”的情绪呢?我的理解是,我们太缺乏“程序正义”,我们也一直在执行“软法律”,以“民意”和“官意”随意解释的法律,随意设立的法律,随意执行的法律,我经常口中所说的“法已不法”。其实如果第一条能做得很好,人人在法律面前都有程序正义,人人都认为法律是合理可行的,那产生暴民心理的土壤就会很快消失殆尽。

上面是我想到的,最后再推荐下王小峰评药家鑫案和夏俊峰案——预测

May 20

“这话说给自己听的是牛逼,说给别人听的是傻逼。 RT @yancaiwm @maoomao @Ryan_XxOo @cxzj: 今天,面对武大的同学,北邮和哈工大的同学应该感到羞愧,难道你们买不起鸡蛋和拖鞋吗?” — http://twitter.com/kcome/status/71268289216643073

May 14

[video]

May 04

iMac更新,有权和无权使用TRON:Legacy的国家列表

iMac更新了,今天是一个大更新,上次或者说我记得的上次的大更新,Apple用了Paramount的Star Trek (2009)的“剧照”做屏幕内容展示,凸显了27寸iMac的震撼力。那个时候我就留心了一下,看看哪些国家的Apple网站用了Star Trek哪些没有用。但最终这些国家列表没记住,今天就写博记录一下吧,不知道会得到神马结论不。今天的TRON:Legacy是Disney的片子,Jobs是Disney的董事会成员。

经过统计这里有个有趣的发现,如果没有采用TRON Legacy电影剧照做屏幕显示图的话,大部分欧洲国家和印度,使用的是一个3D游戏场景;而亚洲和南美国家却是赛车主题的视频静帧。

下面的统计并没有完整列出所有apple.com上指向的各国站

有TRON Legacy做屏幕显示图的国家:


没有TRON Legacy屏幕显示图的国家:

下面的国家都是赛车图案替换TRON的~

下面的国家都是3D场景替换TRON的~


埃及、阿联酋、泰国、沙特、以色列、希腊、土耳其都没有更新iMac

May 02

[video]