khotyn
(10 comments, 63 posts)
This user hasn't shared any profile information
Posts by khotyn
Nausicaa:一个把图片传到Flickr的命令行工具
0懒惰是程序员的美德
前几天看了一片博客,灵感一现,发现平时发博客的时候,把图片传到图床上去要打开浏览器,再打开Flickr或者Yupoo,再上传照片,再找到照片对应的链接,然后这个链接才能够拿来用。看看吧,这个过程是多么的繁琐,作为一名把懒惰当成第一美德的程序员,我马上就想要折腾出一个命令行工具,来把图片上传到相应的图床,现在这个工具就是Nausicaa。
运行效果
那么,来看看上传的效果吧:
Nausicaa在你把图片上传之后,会把图片对应的各个尺寸的静态链接也返回回来,让你可以马上拿到图片的链接。
环境
要使用Nausicaa,最好在Unix-like系统下使用(Windows下谁会去用命令行?)。
另外Nausicaa还需要JRE 6或者以上的版本。
下载与使用
Nausicaa的下载地址是:https://github.com/downloads/khotyn/Nausicaa/nausicaa.jar
使用说明,可以直接进项目主页看:https://github.com/khotyn/Nausicaa
Java中Integer的大小是int的几倍
0今天看到一个不错的PPT:Build Memory-efficient Java Applications,开篇便提出了一个问题,在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍?
我们都知道在Java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大小,那么必须需要知道对象在虚拟机中的结构是怎样的,来看看Hotspot中对象在内存中的结构:

从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分:
- Mark Word:对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等。
- Class对象指针:Class对象指针的大小也是4个字节,其指向的位置是对象对应的Class对象(其对应的元数据对象)的内存地址
- 对象实际数据:这里面包括了对象的所有成员变量,其大小由各个成员变量的大小决定,比如:byte和boolean是1个字节,short和char是2个字节,int和float是4个字节,long和double是8个字节,reference是4个字节
- 对齐:最后一部分是对齐填充的字节,按8个字节填充。
根据上面的图,那么我们可以得出Integer的对象的结构如下:

Integer只有一个int类型的成员变量value,所以其对象实际数据部分的大小是4个字节,然后再在后面填充4个字节达到8字节的对齐,所以可以得出Integer对象的大小是16个字节。
因此,我们可以得出Integer对象的大小是原生的int类型的4倍。
关于对象的内存结构,需要注意数组的内存结构和普通对象的内存结构稍微不同,因为数据有一个长度length字段,所以在对象头后面还多了一个int类型的length字段,占4个字节,接下来才是数组中的数据,如下图:

关于对象内存布局更多的内容,可以看这篇文章:Java Objects Memory Structure
Varamyr – 让Nook 2也可以轻松阅读中文的epub
2好啦,这个标题有点标题党的嫌疑,前几天入手了Nook 2,但是苦于Nook对中文支持并不好,看中文的epub直接显示方块或者问号之类的乱码。
网上看了下这个问题的大致解决方法有两个:一个是Root掉Nook;另一个往epub文件中塞入一段CSS,再在Nook中看的时候只需要选择Publisher Defaults就可以正常显示中文。
第一个方法风险太高,可能导致Nook变砖;
第二个方法的话可以用Calibre之类的工具来完成,但是Calibre这个东西本身太重了,每次打开关闭很耗时间,UI又丑,实在不想用。
所以,我需要一个命令行的工具来完成往epub中塞入一段CSS这个任务,这样可以和*nix下的其他工具结合起来使用,检测一个文件夹中如果新加入了epub文件,就直接进行转换,让整个过程完全自动化。现在这个命令行工具就是Varamyr(Varamyr是马丁大爷的冰与火之歌的第五部《魔龙的狂舞》序言里面的一个狼灵,打酱油的角色。)
运行Varamyr你需要
- JRE环境
- *nix系统,不支持windows也不会支持windows
- 下载varamyr.jar
如何使用?
- 运行命令:
java -jar varamyr.jar <path-to-epub-file>,<path-to-epub-file>为你需要修改的epub文件的路径 - 看看在你修改的epub文件的路径下是不是多了一个类似
xxxx-varamyr.epub的文件。
源代码 & 原理
- 源代码放在github上了:https://github.com/khotyn/Varamyr
- 原理很简单,不用讲了,直接看源代码吧。
Nook 2 入手记
5经过了2个多月的挣扎,我终于了入手了一款电子书:Barnes & Noble 出品的 Nook Simple Touch(即Nook 2),之所以选择Nook 2,是因为Kindle 3已经停产,现在价格比较高,Kindle 4和Kindle Touch的外观我实在是不喜欢,一股山寨味,于是在淘宝上找了一个店下单了Nook 2,前天晚上下单,昨天从深圳发货,今天早上就到手上了,快递非常迅速。

拿到手以后首先是外包装,白色,很小,右上角有一个THE ALL NEW NOOK的字样,表示是全新的Nook,而不是官翻的机子。

打开包装以后里面是就一只Nook和一个USB的连接线,没有其他配件了。首次使用需要充足够的电才能够开机。

充电中,虽然屏幕上写着要等15分钟,但是实际上要差不多1个小时。等冲到了足够的电Nook会自己启动,然后就是一堆设置,连接上Wifi去激活Nook。

看看背面,Nook的开关键在背后,背面的中间是凹进去的,握起来比较舒服。
现在来看看Nook看书的效果到底如何吧:

这个是看英文的epub格式的电子书的照片,可以看到英文字体效果还是非常不错的。

这张是看中文的epub格式的电子书,非常坑爹,直接显示方块了,Nook原生并不支持中文,需要用Root的方式去解决。

然后是英文的pdf,可以看到Nook已经对pdf的文字进行了重新排列,以适合Nook的显示大小。

最后是中文的pdf,看起来效果也还可以。
另外再讲讲操作体验,Nook是红外线触摸屏的,触摸屏的体验非常不错,翻页非常灵敏,触摸屏用来查单词也是非常方便,只要点住单词即可,除了触摸屏以外,Nook在左右两边还提供了4个翻页键,但是遗憾的是按起来需要用点力,感觉不是很好。
屏幕的显示方面,效果还马马虎虎,因为Nook 2采用的是局部刷新,翻了6页以后才全刷,所以翻页后可以看到一些残影,这个非常让人不爽,不知道有没有什么办法可以解决这个问题。
至于和Kindle比较哪个好,哪个差,我也说不上来,总体来说,Nook 2还算是令人满意吧,如果你也要买一个电子书,不妨页考虑下Nook。
慢
2本来今天早上打算去杭图,但昨天睡得很晚,醒来已经到了中午12点,放了别人的鸽子,心里过意不去,又觉得浪费了早上美好的时间,更觉惭愧,于是想要在下午弥补,打算把《Pro Git》看完,给自己点安慰。大约还有四、五章的样子没看,看了下时间,离下午五点还剩四个小时,得抓紧。被这样一种心思给驱动着,结果却完全无法专注进去看,越想快点看完结果越囫囵吞枣地在看,越囫囵吞枣地在看就越急躁,看了十几分钟以后就看不下去了。想想就算看完,那也只是看完了而已,什么收获都不会有,那么干脆停下来吧。
然后我又拿起了《禅与摩托车维修艺术》(即:《万里任禅游》),奇怪的是看这本书的时候心情总是很平静,也许是从来没有打算在什么时候看完它。刚翻到第二部分,突然又想起了这本书中的一句话:
仓促本身就是20世纪最要不得的态度,当你做某件事的时候,一旦想要求快,就表示你再也不关心它,而想去做别的事。
的确,现在信息的获取速度越来越快,结果却把使人们变得越来越不耐烦,越来越没有耐心去做一件事情,也越来越没有耐心去等待一件事情的结果。
信息时代不仅仅加速了信息获取的方式,也加速地消耗着人们的耐心。所以在这个快速的世界里,我想最重要心态是慢。慢不是囫囵吞枣地去做一件事情,也不是对这件是事情无所谓,三天打鱼,两天晒网,慢是从容,从容地把一件事情做好,做完美,虽然这个世界上没有完美的事情,但是当把一件事情做到接近完美的事情,意想不到的事情就会发生。
说到这里,便想起了那部昨天导致我晚睡的电影《时间规划局》,里面的“时间穷人”因为剩余时间总是不多,所以总是行色匆匆。而”时间富人”因为时间总是很充足,所以步调总是比较慢,也比较从容。想想我们的时代,我们的时间并没有科技的发展而流逝地更快,或者流逝的更慢。相对于以前,因为科技的成就,我们做一件事情的时间也更加充裕,我们应该更加从容地去做事情,而不应该更加急迫。
所以,切记切记,慢慢来,不必着急,不知不觉你可以走得比别人更远。