khotyn

khotyn

(10 comments, 69 posts)

This user hasn't shared any profile information

Posts by khotyn

美国丽人

0

美国丽人

从来不知道自己想成为什么人,但是我一直努力避免成为一无所是的人

Nausicaa:一个把图片传到Flickr的命令行工具

0

懒惰是程序员的美德

前几天看了一片博客,灵感一现,发现平时发博客的时候,把图片传到图床上去要打开浏览器,再打开Flickr或者Yupoo,再上传照片,再找到照片对应的链接,然后这个链接才能够拿来用。看看吧,这个过程是多么的繁琐,作为一名把懒惰当成第一美德的程序员,我马上就想要折腾出一个命令行工具,来把图片上传到相应的图床,现在这个工具就是Nausicaa。

运行效果

那么,来看看上传的效果吧:

image

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内存结构地址

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你需要

  1. JRE环境
  2. *nix系统,不支持windows也不会支持windows
  3. 下载varamyr.jar

如何使用?

  1. 运行命令:java -jar varamyr.jar <path-to-epub-file><path-to-epub-file>为你需要修改的epub文件的路径
  2. 看看在你修改的epub文件的路径下是不是多了一个类似xxxx-varamyr.epub的文件。

源代码 & 原理

Nook 2 入手记

5

经过了2个多月的挣扎,我终于了入手了一款电子书:Barnes & Noble 出品的 Nook Simple Touch(即Nook 2),之所以选择Nook 2,是因为Kindle 3已经停产,现在价格比较高,Kindle 4和Kindle Touch的外观我实在是不喜欢,一股山寨味,于是在淘宝上找了一个店下单了Nook 2,前天晚上下单,昨天从深圳发货,今天早上就到手上了,快递非常迅速。

image

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

image

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

image

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

image

看看背面,Nook的开关键在背后,背面的中间是凹进去的,握起来比较舒服。

现在来看看Nook看书的效果到底如何吧:

image

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

image

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

image

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

image

最后是中文的pdf,看起来效果也还可以。

另外再讲讲操作体验,Nook是红外线触摸屏的,触摸屏的体验非常不错,翻页非常灵敏,触摸屏用来查单词也是非常方便,只要点住单词即可,除了触摸屏以外,Nook在左右两边还提供了4个翻页键,但是遗憾的是按起来需要用点力,感觉不是很好。

屏幕的显示方面,效果还马马虎虎,因为Nook 2采用的是局部刷新,翻了6页以后才全刷,所以翻页后可以看到一些残影,这个非常让人不爽,不知道有没有什么办法可以解决这个问题。

至于和Kindle比较哪个好,哪个差,我也说不上来,总体来说,Nook 2还算是令人满意吧,如果你也要买一个电子书,不妨页考虑下Nook。

khotyn's RSS Feed
Go to Top