Skim是一个功能很强大的但是较轻量的Mac下的PDF阅读器。自从升级到Mac OS X 10.6之后,我一直也没有去下载过Adobe Reader,因为感觉太庞大了(9.3版本是40.3M),一直就用系统自带的Preview看PDF,一般也就看看篇幅比较短的内容,也还过的去。最近开始看一本500页的电子书,长时间用Preview,希望能调到一个比较好的模式观看,但是总是无法完成。

后来特地去找了找,发现了Skim,使用下来发现确实不错,这里只针对我自己的阅读需要列举几点相对Preview的好处:

  1. 缩放功能。PDF书籍往往两侧都有大量的空白空间,对于我的13寸的MacBook,屏幕空间还是很重要的资产。Preview下的缩放的可调整粒度太粗,想把内容放大些往往一zoom in就过了头,但是再zoom out又觉得太小。Skim中的缩放粒度更细,能够更精确的调整到我想要的那个缩放幅度。
  2. 全屏阅读。想要全屏阅读原因同上,笔记本屏幕对我来说太小了。Preview只有一个SlideShow全屏,两侧的空间根本没利用上,反而把PDF内容变的更小了,感觉更主要是用来看照片用的。Skim的全屏则可以调整,充分利用整个屏幕的空间。Skim还有一个presentation mode的全屏,看起来就和Preview中的全屏差不多,但是对我用处不是很大,可能讲课什么的时候会比较有用。
  3. Apple Remote支持。可以用Apple Remote来遥控翻页和缩放等。听起来有点傻,连屏幕的字都感觉小了难道还准备坐在几米开外遥控着看?如果你把Mac接到你家的大号电视上你就不会这么想了。Skim app PDF reader

公共汽车地图导航

四月 12, 2010

前段时间坐车到亲戚家去玩,地方挺偏的,在上海的嘉定区,回来的路上做坐的江桥一路,在车上发现了这个:
公车上的定位系统

一般的车上的电视放的都是什么东方明珠移动电视,这个江桥一路上面装备的居然是一个像GPS导航仪一样的系统,应该主要是给乘客看的。很赞,尤其是像这种偶尔乘坐的线路其实是很有用的,现在坐到哪站大致方位如何都一目了然。一路上我盯着这个屏幕看了老半天,发现定位还是挺准确的,汽车前方快拐弯都能一下就能够从地图上看出来并有所准备。

车上的终端装的居然是Windows,然后看样子是用了MFC写了一个客户端(看图标像…都什么年代了)。通讯似乎是通过EDGE信号,估计里面还得有个GPS的芯片,光用基站定位的话似乎没这么准,我的iPhone还号称又是WiFi又是GPS又是基站画三角形什么的,结果还是一直差出几条马路…

如果你买了Mac,那么很大的可能,你也买了Mighty Mouse

如果你买了Mighty Mouse,那么很大的可能,你发现你使用了一段时间之后,Mighty Mouse的滚轮向上或者向下很难滚动了。

我就碰到了这样的一个问题:我买了苹果的无线的Mighty Mouse,在使用了将近一年的时候,发现鼠标滚轮的向下功能越来越难使用,要很费劲才能够向下滚动。我考虑这是个机械问题而不是软件问题,想研究下怎么把它拆开来清洁一下,不过Mighty Mouse其实叫做Mighty Tortoise更合适,把后盖打开,卸下电池,还是无法拆开来,上面的一大块龟壳实在太紧密了。我没忍心下重手,又忍了一段时间。之后发现实在不能忍了,在网上搜了一下,发现这原来是个普遍问题,按照网上的方法进行了清理,其实很简单:

  1. 随便找一张白纸。我就从我的笔记本上面扯了一张下来。
  2. 把你的Mighty Mouse倒过来,就是把乌龟壳朝下。
  3. 手握倒过来的鼠标,把滚轮那部分贴上白纸,稍微用点力迅速旋转。转上几圈你就能发现白纸上有很多脏东西,那些就是罪魁祸首。等到没什么脏东西继续出来的时候就差不多了。
  4. That’s it. 你的鼠标应该已经恢复如初能够正常使用了。

注:

其实应该有不少其他的办法,比如用力吹,或者用压缩空气吹,或者倒过来用很大力气按滚轮并旋转等,不过我比较(脑袋中比较而已)了下感觉还是用上面的这个方法效果好并且简单,还能够清楚的看到清理的战果 :)

Apple每年都会有一些新的event举行,发布些新产品。夹不死同学的keynote总是很帅气,Apple甚至还用高清来发布keynote。不过美国时间和中国有差异,像我这么懒的人又不想熬夜,所以只能选择第二天早上起来看看新闻。看了新闻还不过瘾,还想直接看keynote视频。今天早上就是这么一个早上,Apple发布了最新的Macbook系列产品,新闻刷的一下就看完了,于是开始找keynote视频,不过似乎还没有人帖出来直接下载的链接,便自己研究了下,终于找到了方法如何直接下载苹果官方的keynote视频:

1) 使用任何下载工具[1]下载http://www.apple.com/podcasts/apple_keynotes/apple_keynotes.xml这一文件[2]

2) 打开这个文件,看看里面有没有最新的keynote链接[3]。在这个文件里面,每个special event都会有日期的,所以很容易就能够辨认出来哪个是你需要的。比如今天的,也就是2008年10月15日(美国是2008年10月14日夜)的在这个文件中显示如下:

<item>
<title>Apple Special Event, October 2008</title>
<itunes:author>Apple Inc.</itunes:author>
<description>Watch Apple CEO Steve Jobs reveal what’s new in Mac.</description>
<itunes:subtitle>Watch Apple CEO Steve Jobs reveal what’s new in Mac.</itunes:subtitle>
<itunes:summary>Watch Apple CEO Steve Jobs reveal what’s new in Mac.</itunes:summary>
<enclosure url=”http://movies.apple.com/datapub/us/podcasts/apple_keynotes/sj-keynote-20081014.m4v” length=”598065773″ type=”video/x-m4v”     />
<guid>sj-keynote-20081014</guid>
<pubDate>Tue, 14 Oct 2008 19:00:00 GMT</pubDate>
<itunes:explicit>no</itunes:explicit>
<itunes:duration>52:37</itunes:duration>
</item>

那个enclosure标签里面的链接就是直接的下载链接。

3)  随便你使用什么下载工具下载就是了,速度肯定比iTunes下载要快的多。

注:

[1] 比如我直接用curl这个命令行工具, curl  http://www.apple.com/podcasts/apple_keynotes/apple_keynotes.xml > keynotes.xml即可。或者用浏览器直接打开,现代的浏览器都可以看到视频的链接的(比如我用Firefox3就可以直接看到格式化好的feed,里面就会有视频的链接),如果不行,就看源代码就是了。

[2] 如果你要问我是怎么找到这个xml文件的,也很简单。Apple在iTunes专门有一个keynote的feed, 你用iTunes订阅了这个feed之后,在iTunes里面右键点击这个订阅,选择”Show Description”,也即查看描述,在描述页面里面有一个订阅的地址,就是这个xml文件。

[3] 如果你用iTunes订阅了这个feed,直接在iTunes里面就能够看到是不是有新的内容出现,不用每次都下载这个文件来看是不是有新的内容。

前段时间看了一个TED上面的演讲,演讲人叫Robert J. Lang,是一位NASA的工程师。他有一个很有趣的研究,是关于将数学应用于日本的一种叫做Origami的折纸艺术(中国是不是也有,不知道谁早?)。通过应用高超的数学技巧,能够使用纸张折叠出异常复杂、逼真的三维的物体。在他在TED上的演讲中,就有不少例子,其中还有一个三菱的汽车广告,广告中的所有场景和物体(当然,除了三菱的汽车)都是使用这种方式构造出来的。他还有一个关于Origami的网站(似乎国内被GFW掉了,需要代理),里面也有很多例子。

同样的一张纸,通过不同的数学计算能够折叠出不同的形状,这不就像变形金刚的变形吗?可以想象一下,变形金刚的最初的形状其实是一大个二维平面状物体,通过应用类似的数学技巧,只要每次通过计算机计算折叠的方式,就可以转化成为三维的一个物体。也许不能像汽车飞机一样行动,但是在形状上模仿肯定是没有什么太大问题的,而且一个变形金刚应该能够通过不同的计算,变形成为多种不同的形状。如果做一个权衡,只要求变成一种形状,但是在特定的地方加一些特定的设备(如汽车的轮子或者飞机的推进器),是很有可能实现真正的变形金刚的变形功能的~更可能实现的,是基于这个做一个简单的变形玩具,肯定会卖疯的:-)

发布Ruby Gem

五月 21, 2008

RubyGems是一个用于Ruby的包管理工具,虽然并未包含在Ruby的发行版中,但是可以认为是事实上Ruby世界中标准的发布Ruby程序和库的工具,可以很方便的管理gem之间的依赖性。

如果你是在进行Open Source的Ruby程序开发,可以直接通过Rubyforge来发布gem。不过如果是自己的私有项目,可能就需要自己搭建一个Web server来进行gem的发布了。如果系统中已经安装了RubyGems的话,通过gem server (gem help server看看用法)就可以启动一个简单的gem发布的server。不过很可能的,你已经有一个Web Server在系统环境中了(如Apache Web Server),这个时候就通过以下的几个步骤可以完成把这个Web Server改造成为一个gem distribution server:

1) 建立一个发布目录,并设置Apache(或者其他的Web Server)使得这一目录能够通过Web访问。并在这一发布目录下建立一个名为gems的子目录。

比如我们在htdocs目录下建立一个目录dist,并建立一个gems子目录。

2) 拷贝打包好的gem到dist/gems目录中。

 如拷贝allmighty-1.0.gem到htdocs/dist/gems目录中。

3) 在命令行界面中,进入dist目录,运行“gem generate_index .”(请注意最后的一个点,表示当前目录)。这一命令会对gems子目录中的所有gem建立一个索引文件yaml,并存放在dist目录下,以便可以通过gem install命令安装时查找。

4) You’re done~

在这之后,你就可以通过”gem install allmighty –source http://yourhost.com/dist/”命令来安装你新发布的gem了。

5) 如果以后还有新的gem需要发布或者有新的版本的gem需要发布,请从步骤2)开始继续即可。

关于RubyGems,有一本很好的书,介绍了其使用、开发和发布等,有兴趣的话可以看看。

Practical Ruby Gems

expensr.com is dead

三月 18, 2008

expensr.com是一个在线的个人记账软件,我从2007年下半年开始用它,感觉很符合我的需要 – 简单易用,能够有基本的统计报表功能。我在2007年7月底的时候还给它们发了个邮件,提了点关于它的报表显示的建议。在我发邮件的第二天expensr就给了我答复,说它们正在做帐户之间转帐这一功能,这个如果做好的话报表这方面的显示就ok了。我当时对它的响应速度很满意。

但是到了2008年春节期间,expensr进行了一些更新,但是引入了一个bug – 中文输入的所有的字符显示都不正常了,这直接导致了我没有办法继续使用这一系统,我的所有的帐户名称和大多数的开支名称都是使用中文填写的。这次,我再次给它们发了邮件报告了这一bug,但是过了很久都没有反馈。我在这之后的一段时间又发了两封邮件报告这一bug,但是都没有得到答复。现在,2008年3月18日,距离我发现这一bug已经45天了,系统没有任何的更新来修复这一严重的bug,对我的三封邮件也没有任何的响应。我看了expensr的官方blog,从2007年12月11日之后就没有任何更新了,虽然从网上搜索的结果看来,expensr.com很有前途,但是就目前我的使用和观察,expensr.com命不久矣
update:
果然一个月之后expensr.com宣布被收购,expensr.com的用户都会转到moneyStrands,希望转移之后的应用能够比较好。

购买Mac

九月 12, 2007

最近正在筹划如何比较合算的购买一台Mac,购买Apple的东西的方法比较多,在线购买或者线下购买,Apple自己的商店或者第三方的商店,都有一些不同的讲究。

使用Education Discount实际购买者现身说法:

结论就是:
对于Apple Online Store上面使用Education Discount进行购买的话,Apple可能会进行随机的检查。而且照回复的情况来看,随机检查的概率还是比较高的。如果被发现是欺骗的话,会要求退款。如果不理会这一退款请求的话,可能会收到律师信…因为省的不多,100刀也就800RMB不到,比较起来还是不值得冒这个险。如果你在美国有认识学生的话就很好办了,直接叫其帮忙代买一下,这个似乎完全没有什么问题。而且如果是能够通过学校内的Apple Store进行购买的话,可能会更加便宜。

如果你是在Apple的零售店里面购买的话,则完全看你人品好不好,碰到个好的服务员的话就ok了…

Rails的file_column插件是一个简单但是功能比较完备的文件上传插件。这一插件已经有很长时间没有更新了(最后一次更新是在2005年),但是就其功能和兼容性来说,一般的使用似乎没有什么问题。其用法也相当简单,大致的看看网站上面的文档即可。但是如果要做一些自定义的工作的话,就需要直接看它的源代码了。代码量不多,包括测试代码也就10多个文件。

最容易碰到的自定义需求应该就是定制上传文件存储的位置了,默认是在public目录下根据不同的模型名称来建立目录,明显的,这很容易造成“污染”,导致public目录下面生成大量的子目录。在看了其源码之后,注释中说明是可以通过给file_column这一方法传入参数:root_path来覆盖默认值的。我将root_path设置到public目录的file子目录下,试了之后在开发模式下上传文件确实没有问题,但是进行functional testing的时候发现并不正确。我在模型中设置了对文件大小进行验证的validates_filesize_of。这一方法在测试运行时验证查找的路径是在public目录下查找,这明显是不正确的,也即,仅仅覆盖root_path参数虽然能够在开发模式下正常工作,但是functional testing有些不同,按照其注释中的说法以及源代码,进行单元测试时file_column会把RAILS_ROOT/test/tmp/file_column这一目录作为根目录,而不是RAILS_ROOT/public/。单元测试时应该在setup方法中调用setup_fixture_files,在teardown中调用teardown_fixture_files,这两个方法会把文件fixtures复制到RAILS_ROOT/test/tmp/file_column目录下测试,测试结束后就移除。但由于根目录被我们传入的参数root_path覆盖,导致测试时的代码无法通过。解决的办法有两个,一个是按照不同的运行h环境来设置根目录,代码如下: 

if RAILS_ENV != "test"
  file_column :image, {:root_path => File.join(RAILS_ROOT, "public", "files")}
end
if RAILS_ENV == "test"
  file_column :image, {
  :root_path => File.join(RAILS_ROOT, "test", "tmp", "file_column", "files")
  }
end

但是这样做也有一个缺点,那就是如果在测试模式下进行集成测试的话(如使用selenium进行测试),file_column又会到test/tmp/file_column下查找文件。这也是明显不正确的,会导致文件无法访问。另外一个做法,可以做到万无一失的–直接修改file_column这一插件的代码:-)

用Eclipse习惯了,切换到Visual Studio之后发现有很多不顺手的地方。Eclipse中有一个功能,使用Ctrl+Shift+R就能够快速根据文件名打开任意的文件资源。在IntelliJ IDEA中也有这一功能,Ctrl+Shift+N就可以搞定。但是Visual Studio中却没有,每每要到目录树中查找一个文件,十分耗时。

今天偶然间发现了可以利用Eclipse来“帮助”Visual Studio实现这一功能。做法十分简单,把Visual Studio中的项目导入到Eclipse中。比如这是一个C++的项目(VS中最经常遇到的),因此就需要经常打开*.cxx,*.cpp,*.h等类型的文件。在Eclipse中文件关联中将这些类型的文件设置为使用VS打开,这样就可以在Eclipse中使用Ctrl+Shift+R迅速定位文件,然后一按回车,文件就在VS中打开了:)

下一页 »