找回密码
 FreeOZ用户注册
查看: 3914|回复: 14

[新技术交流] 在Google Code上创建了kindle tools项目

[复制链接]
发表于 1-10-2010 12:34:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
为了分享一些有用的小工具,我在google code上创建了一个新的项目:

http://kindle-tools.googlecode.com

有兴趣参与这个项目的同学请与我联系,我会把你加入到developer list中去。
目前这个项目的owner是:freeoz.k3@gmail.com
有什么需求,请发到这个邮箱去。
当然,我未必会看,哈哈哈。。。。

评分

参与人数 1威望 +50 收起 理由
trisun + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

发表于 1-10-2010 23:04:58 | 显示全部楼层
有兴趣,啥都不会,行么?
回复  

使用道具 举报

 楼主| 发表于 2-10-2010 13:01:18 | 显示全部楼层

做了个开发计划

http://kindle-tools.googlecode.c ... t%20Plan%20v1.0.doc

有兴趣的同学请下载看看去。
回复  

使用道具 举报

 楼主| 发表于 2-10-2010 13:02:31 | 显示全部楼层


开发计划里有Java和脚本两个主要问分,饼叔想搞Java还是脚本?
你也可以发挥一下你的C++,做一两个模块出来用一用。
回复  

使用道具 举报

发表于 2-10-2010 23:09:33 | 显示全部楼层
原帖由 key 于 2-10-2010 12:02 发表


开发计划里有Java和脚本两个主要问分,饼叔想搞Java还是脚本?
你也可以发挥一下你的C++,做一两个模块出来用一用。


行啊。老师给布置任务吧
回复  

使用道具 举报

发表于 2-10-2010 23:30:32 | 显示全部楼层
我有兴趣,但是我不喜欢java,我喜欢.net + powershell.

评分

参与人数 1威望 +50 收起 理由
key + 50 语言不限,建个DotNet开发目录就行了。

查看全部评分

回复  

使用道具 举报

 楼主| 发表于 3-10-2010 11:11:53 | 显示全部楼层

非正式发布 0.1-RC Command Line文本版本

一个初步可以使用的命令行版本已经可以释出,现在非正式发布,请各位民工级Kindle用户
在责任自负的前提下自己checkout使用。

1. 项目checkout
具体内容请查看:
http://code.google.com/p/kindle-tools/source/checkout
简单来说就是:
svn checkout http://kindle-tools.googlecode.com/svn/trunk/ kindle-tools

对svn有疑问的同学请自己找书看。

2. 项目目录
为了兑现“语言不限”的承诺,我建立了JavaTools项目目录,在其下建立maven Project Object Management配置。
tiny-test-area大致上和论坛的灌水区同义,想试试手的同学请到这个区灌程序,但注意不要放太大的文件,
比如一些网上可以找到的库,请提供下载地址或下载脚本即可,不要直接把文件copy进去。

JavaTools目录下的目录结构大致上参考了《Maven Definitive Guide》的建议,
事实上我是首先参考了“江南白衣”同学的springside项目,然后再参考《Maven Definitive Guide》,
而白衣老大本身就是啃这书的,所以基本上同源。不过那个modules/*-parent目录越来越让我觉得does not make sense,
先用着吧。

3. 项目平台搭建

如果你还没有搭建你的maven平台,请行下载。如果找不到maven,请自行放狗。

4. 项目编译

到JavaTools目录下一个命令搞定:
mvn compile

如果你想制作jar:
mvn package -Dmaven.test.skip=true

如果你实在想看看我的unit test做了什么可以把-Dmaven.test.skip=true这句去掉

5. 项目执行

我现在没有建议单单的项目执行脚本,因为暂时目标用户群还是广大民工同学,基本上指望大家打字快,
查书快,放狗也快。执行程序,请直接用maven来执行:

cd modules/k3tool-cli
mvn exec:java -Dexec.mainClass=k3tool.cli.SimpleTxtFileProcessor
如果你落足眼力,应该能看到下面的usage:
Missing base dir

usage: java -cp <classpath> k3tool.cli.SimpleTxtFileProcessor
-b <baseDir>     Base input directory
-c <file>        Configuration file
-C <file>        Create configuration template
-o <targetDir>   Target output directory

5.1 建立配置文件模板

我把OPF的配置简化成自己的配置。为了减轻文档压力,我建立了一个配置文件模板,你可以用程序来生成这个模板。
-C <file>        Create configuration template

mvn exec:java -Dexec.mainClass=k3tool.cli.SimpleTxtFileProcessor -Dexec.args="-C my-config.xml"

生成的配置文件模板如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Book>
  3.     <Info name="title">Title of the book</Info>
  4.     <Info name="language">zh-cn</Info>
  5.     <Info name="creator">Name of the creator</Info>
  6.     <Info name="publisher">Name of the publisher</Info>
  7.     <Info name="subject">Subject of the book</Info>
  8.     <Info name="desc"/>
  9.     <Info name="coverPath"/>
  10.     <Info name="welcomePath"/>
  11.     <Info name="tocFile"/>
  12.     <Info name="inputCharset">GB18030</Info>
  13. </Book>
复制代码
对XML文件有疑问的民工请自行查书或放狗。

修改这个配置文件,查注意,如非必要,本配置文件以及其他所有的文件请用UTF-8编码,对编码有疑问的同学,请自行放狗。
下面是我做的金庸全集的配置文件,请参考之:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Book>
  3.     <Info name="title">金庸全集</Info>
  4.     <Info name="language">zh-cn</Info>
  5.     <Info name="creator">金庸</Info>
  6.     <Info name="publisher">金庸</Info>
  7.     <Info name="subject">金庸全集</Info>
  8.     <Info name="desc"></Info>
  9.     <Info name="coverPath"/>
  10.     <Info name="welcomePath"/>
  11.     <Info name="tocFile"/>
  12.     <Info name="inputCharset">GB18030</Info>
  13. </Book>
复制代码
5.2 生成OPF档案

本程序的作用是对指定目录下的所有文本文件建立一个相应的OPF档案,再用Kindle的官方工具生成Kindle文档格式。
下面是程序执行的命令example:

mvn exec:java -Dexec.mainClass=k3tool.cli.SimpleTxtFileProcessor -Dexec.args="-c my-config.xml -b C:\eBook\金庸全集 -o output\金庸全集"

如果程序没有出错,你能看到下面的生成目录:

output\金庸全集\content

内容如下:
generated-output-jingyong.png

5.3 生成mobi/prc文件

cd output\金庸全集\content
kindlegen Kindle-Book.opf -o 金庸全集.mobi -unicode

kindlegen不是我写的,是尊敬的amazon同学写的。要注意这个东西性能一般,
我要它生成一套金庸全集,它花了我十多分钟,当然,如果内容少一些,比如只生成
一套鹿鼎记会好很多。

-unicode参数比较有必要,你可以试试用和不用。

评分

参与人数 1威望 +50 收起 理由
coredump + 50 精品文章

查看全部评分

回复  

使用道具 举报

 楼主| 发表于 5-10-2010 11:02:01 | 显示全部楼层

0.2 RC释出,Kindle-tools进入实战阶段

经过这个长周末的奋战,现在kindle-tools已进入0.2-RC实战阶段。
现在kindle-tools已经可以实用性地支持txt, html, xhtml和各种图片
(被拍砖,我知道其他工具也支持,但我这个是定制库程序,不是GUI界面实用程序)。

目前我已经在kindle-tools的基础上建立了自己的应用服务器,定时打包一些我关心的
信息,建立电子书,推送致我的K3,只要有wifi网终,我就可以自动下载这些电子书。

这是电子书下载到本地后的home列表
DIR.png

这是电子书的目录,我目前对这个目录不是太满意,接下来会做一些改动,不过暂时能用,先用几天吧。
DIR-TOC.png

这是电子书的内容,没有什么特别了。
content.png

简单来说,kindle-tools是一套基础支持工具,你可以在上面建立你自己的应用,而不需要了解和处理
各种关于OPF,编码等问题。关键是你可以自己定制自己的工具,不需要等别人送上门来。

评分

参与人数 1威望 +50 收起 理由
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

 楼主| 发表于 5-10-2010 11:11:15 | 显示全部楼层
关于kindle-tools的功能简介。

1. 自动基于目录建立电子书,包括书目和内容。
2. 支持TXT和HTML等格式。MobiPocket Creator也支持这个功能,但kindle-tools可以做得比它更好。
对于一个html文档,如果包含了一些图片,而图片放在remote的话,kindle-tools会下载这个图片到本地。
远程图片在kindle上是不支持的(电子书呀同学)。
3. 离线文档与在线地址的结合。如果有一个离线的HTML文档,可以在同一个目录下建立一个名称为:
   <DOT><HTML File Name><DOT>baseurl
的文本文件,用一行来记录这个离线文件原来的URL。这样做的作用在于,如果这个离线文档上有相对路径的图片,
这个图片会在建立电子书的过程中被自动下载下来。

评分

参与人数 1威望 +50 收起 理由
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

 楼主| 发表于 5-10-2010 11:22:26 | 显示全部楼层

Kindle-Tools上第三方程序库

Kindle tools上大量采用了第三方开源程序库,主要是Apache家族那些成员。
排名不分先后,包括:

XOM: 一个名声还不错的XML处理库。
Apache commons-cli: 一个用于处理console程序输入参数的库
Apache commons-beanutils: 一个用于简化Java Bean Reflect操作以及基础库型的auto convert的库
Apache commons-lang:我基本上只用StringUtils
Apache commons-io:一个用于简化IO操作的库,包括文件和目录的拷贝、删除以及简化一些常用的数据写入与读出操作的库。这套东西我用得不熟,程序有点bug
TagSoup:一套用于处理HTML至XHTML转换的库,名声不错,不过我发现它对于XML encoding的支持有点问题,现在只能手动定制编码。你会看到一个写得很奇怪的static method,就是为了做手动编码支持TagSoup而写的。
Spring Framework:事实上我暂时没有大量用它,至少在kindle-tools上。因为kindle-tools本身是一个工具库,而不是终端程序界面,所在spring framework的作用不大。但spring framework IOC是一个基础思路,我在终端服务器上用这东西。

评分

参与人数 1威望 +50 收起 理由
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

 楼主| 发表于 5-10-2010 11:41:07 | 显示全部楼层

程序质量问题

目前kindle-tools已经包含了18个类文件,1,777行代码(包括空行和注释,但不包括test package的代码)。
但这套东西我目前暂时还不关心代码质量问题。相反,我有点故意把代码写得随便一些,
而不执着于代码的风格(naming convention我还是执着的),类设计和框架设计,
我希望采用功能驱动的方式,和后期refactor的做法来实现系统的进化。
虽然Don Knuth同学很不认同这些东西,我也不太认同,但没有实践没有发言权,
所以我打算在这里实践一下。

比如,除了一开始我写了好几个model来represent OPF标准之外,其他东西我基本上把实现都压入一些
我认为最容易想到的类中去,最典型的例子是SimpelTxtFileProcessor,这是一个console接口,
但我把所有的东西都压进去写,然后再考虑其他。

如果你希望加入这个项目,我不强制要求你跟随我这种风格。你可以随时提出你的refactor观点或类框架
设计,只要发个邮件给我说说你想怎样做就行了。但如果你想“学习”我的代码,那就建议不要了。这套东西
可能是我目前写得最烂的一套代码。当然,你可以理解成我为了避免被牛人们b4的借口。

评分

参与人数 1威望 +30 收起 理由
coredump + 30 hehe

查看全部评分

回复  

使用道具 举报

发表于 6-10-2010 12:58:40 | 显示全部楼层
key  真是精力无限啊!
回复  

使用道具 举报

发表于 6-10-2010 13:03:52 | 显示全部楼层

回复 #12 清风不写字 的帖子

quick hand man
回复  

使用道具 举报

 楼主| 发表于 21-10-2010 11:30:26 | 显示全部楼层

制作并发布电子书:Hibernate Reference 3.6

http://code.google.com/p/kindle- ... ip&can=2&q=

这本电子书是由kindle-tools + wget + 手动操作做出来的,
我之前试过直接由PDF制作,但没有目录,很不方便。
所以就自己半自动做一本了。
回复  

使用道具 举报

 楼主| 发表于 22-10-2010 09:37:13 | 显示全部楼层

kindle-tools大bug求修正

目前kindle-tools采用的是TagSoup + XOM的方式来处理HTML/XHTML,
这个解决方案之下,HTML会出现一个问题:<pre/>元素问题。
由于我把所有的HTML元素都当做一般的XML元素来处理,这样<pre/>就会出错。
因为输出的格式会被启动格式化,而这个格式会改变<pre/>的样子。

希望大家能提出一个好的解决方案,谢谢。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 29-3-2024 11:16 , Processed in 0.063523 second(s), 41 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表