存档

‘开源工具’ 分类的存档

推荐给TeX新手的电子书和书籍

2010年4月17日 admin 没有评论

CTEX自带的文档:
1、安装好CTEX后,c:\CTEX\CTeX\ctex\doc\下的两个文档,ctex-faq.pdf和lshort-cn.pdf(即93 分钟学会 LaTeX2e)
2、ftp://ftp.ctex.org/pub/tex/documents/bible/ 下的 LaTeX_manual.zip
对于初学者,上面3个文档足够了,在c:\CTEX\CTeX\ctex\doc\目录下的其他几个文档也非常好。

如果想进一步学习,推荐下面一本书。
3、《LaTeX入门与提高》,陈志杰,2008,高等教育出版社,卓越上有卖的。这里有个PDF扫描版

网上的免费电子书:
4、A Guide to LaTeX
5、the latex companion,和第2个文档 LaTeX_manual 在同一个ftp目录下,还有另一个下载地址
6、LaTeX2e使用手册
7、LaTeX2e插图指南

参考资料:
陈志杰老师的《latex入门与提高》这本书怎么样啊?
中国LaTeX 新用户,LaTeX中文必读教程

分类: 开源工具 标签: , ,

基于Ubuntu Jeos打造自己的精简版Linux服务器

2010年4月14日 admin 没有评论

1. 下载 Ubuntu Server

官网的地址是:http://www.ubuntu.com/getubuntu/download-server

在这里下载的是标准的服务器版Ubuntu。为什么呢?因为 Ubuntu Jeos 现在已经并入了 Ubuntu Server 的ISO中了,这里有提到:

Now part of the standard server ISO image

2. 下载并安装VMware Workstation

当前最新版本是 7.0.1 build-227600

3. 安装 Ubuntu Jeos虚拟机

一般选择默认,直接一路next即可,需要注意的地方本文会给出说明。

这里一定要选择 “I will install the operating system later”,因为如果选择前面两个,就会启用 “Easy Install”功能,即VMWare会很智能的识别这是Ubuntu,自动给你安装,你待会儿就没机会选择选项了。 阅读全文…

分类: 开源工具 标签: ,

Java 读写图像

2010年4月1日 admin 没有评论

Java中进行图像I/O(即读图片和写图片,不涉及到复杂图像处理)有三个方法:
1. Java Image I/O API,支持常见图片,从Java 2 version 1.4.0开始就内置了。
主页:http://java.sun.com/javase/6/docs/technotes/guides/imageio/index.html
2. JAI 中的 Image I/O Tools,支持更多图片类型,例如JPEG-LS, JPEG2000, 和 TIFF。
主页:https://jai-imageio.dev.java.net/。JAI 是一个关于图像处理的框架,很庞大,
其中仅仅jai-imageio是关于图像I/O的,其他的可以不看。
3. JAI的com.sun.media.jai.codec 也有一定的图像解码能力

当然,还有众多的java开源工具包可以读写图像,例如JIMI, JMagic等,但JDK目前本身能
够读写图片,就用JDK的,开发和部署方便,不需要额外下载jar包。

由于JAI是Java新加入的,很多组件不是正式规范,JDK不自带,因此开发和部署需要额外
安装,安装文件在官网https://jai.dev.java.net/下载得到。

如果你仅仅想读取常见格式的图片,不需要用JAI这么高级这么庞大的东西,
用Java Image I/O API即可。

下面重点介绍 Java Image I/O API。

Java Image I/O API 主要在 javax.imageio 下面。JDK已经内置了常见图片格式的插件,
但它提供了插件体系结构,第三方也可以开发插件支持其他图片格式。

下面这段代码可以展示,JDK内置支持的图片格式。
import javax.imageio.*;
import java.util.Arrays;

public class HelloWorld {
public static void main(String args[]) {
String readFormats[] = ImageIO.getReaderFormatNames();
String writeFormats[] = ImageIO.getWriterFormatNames();
System.out.println(“Readers:  ” + Arrays.asList(readFormats));
System.out.println(“Writers:  ” + Arrays.asList(writeFormats));
}
}

主页上有一个文档,Java Image I/O API Guide,很通俗易懂,可以让你快速上手。以下
内容主要来自这个文档的第3章。

第3章 编写图像I/O程序
3.1 读写图片
javax.imageio.ImageIO类提供了一组静态方法进行最简单的图像I/O操作。
读取一个标准格式(GIF, PNG, or JPEG)的图片很简单:
File f = new File(“c:\images\myimage.gif”);
BufferedImage bi = ImageIO.read(f);

Java Image I/O API 会自动探测图片的格式并调用对应的插件进行解码,当安装了一个新
插件,新的格式会被自动理解,程序代码不需要改变。

写图片同样简单:
BufferedImage bi;
File f = new File(“c:\images\myimage.png”);
ImageIO.write(im, “png”, f);

3.2 更进一步
上一节谈到的方法对于简单程序已经足够了。不过,Java Image I/O API 提供了为编写复
杂程序的能力。为了利用API的高级特性,应用程序应当直接使用类ImageReader 和
ImageWriter。

3.3 ImageReader 类
与其用ImageIO类来进行所有的解码操作,不如用ImageIO类去得到一个ImageReader对象,
再用这个对象去进行读操作:
Iterator readers = ImageIO.getImageReadersByFormatName(“gif”);
ImageReader reader = (ImageReader)readers.next();

ImageReader对象也可以基于文件内容、文件后缀或MIME类型获得。这个用于查找和初始
化ImageReader对象的机制用到了javax.imageio.spi.ImageReaderSpi类,它可以在不用初
始化插件的情况下获得插件的信息。”service provider interfaces” (SPIs)将会在下一
章详细讨论。一旦获得了一个ImageReader对象,必须给它是指一个输入源。大部分
ImageReader对象可以从ImageInputStream类输入源读取数据,ImageInputStream是Image
I/O API定义的专用输入源。

获得一个ImageInputStream 是简单的。给定一个File或InputStream,一个
ImageInputStream对象可以通过调用如下函数产生:
Object source; // File or InputStream
ImageInputStream iis = ImageIO.createImageInputStream(source);

一旦有了输入源,可以把它与一个ImageReader对象关联起来:
reader.setInput(iis, true);

如果输入源文件包含多张图片,而程序不保证按顺序读取时,第二个参数应该设置为
false。对于那些只允许存储一张图片的文件格式,永远传递true是合理的。

当ImageReader对象有了输入源后,我们就可以获取图片信息而不用把整张图片数据都读入
内存。例如,调用reader.getImageWidth(0)可以让我们获得文件中第一张图片的宽度。一
个好的插件会试图解码文件的必要部分,去获得图片的宽度,而不用读取任何一个像素。

为读取图片,可以调用reader.read(imageIndex), imageIndex是文件(当包含多张图片时)
中图片的索引。这与上一节调用ImageIO.read()产生的结果相同。

3.3.1 ImageReadParam
如果需要更多的控制,可以向read()方法传递一个ImageReadParam类型的参数。一个
ImageReadParam对象可以让程序更好的利用内存。它不仅允许指定一个感兴趣的区域,还
可以指定一个抽样因子,用于向下采样。

例如,为了只解码图片的左上角的1/4,程序可以先获取一个合适的ImageReadParam对象:
ImageReadParam param = reader.getDefaultReadParam();

接下来,指定图片区域:
import java.awt.Rectangle;
int imageIndex = 0;
int half_width = reader.getImageWidth(imageIndex)/2;
int half_height = reader.getImageHeight(imageIndex)/2;
Rectangle rect = new Rectangle(0, 0, half_width, half_height);
param.setSourceRegion(rect);

最后,读取图片:
BufferedImage bi = reader.read(imageIndex, param);

结果是一张新图片,宽和高都只有原图片的一半。

另一个例子,为了读取每三个像素中的一个,产生一个原图片1/9大小的图片,可以用
ImageReadParam指定抽样因子:
param = reader.getDefaultImageParam();
param.setSourceSubsampling(3, 3, 0, 0);
BufferedImage bi3 = reader.read(0, param);

3.3.2 IIOParamController
插件有时会提供一个IIOParamController类,这是可选的。略。

3.3.3 读多图片文件
ImageReader 中所有与图片打交道的方法都有一个imageIndex 参数,这个参数用于读取多
图片文件中的一张。

ImageReader.getNumImages()返回多图片文件中的图片个数。这个方法有一个boolean参数,
allowSearch。有的图片格式,典型的GIF,没有提供任何获取文件中的图片个数方法,除
非读取整个进行解析。这样代价很高,因此设置allowSearch为false可以让方法直接返回
-1,而不是实际的图片个数。如果此参数是true,则该方法总会返回文件中实际的图片个
数。

即使在不知道文件中图片个数的情况下,仍可以调用read(imageIndex); 如果索引值过大,
该方法会抛出IndexOutOfBoundsException异常。因此,程序可以递增索引去获取图片,
直到异常。

3.3.4 读缩略图
有的图片格式允许一个(或多个)小的预览图,与主图片一起存储在文件中。这些
“缩略图”对于快速识别图片很有用,不用解码整个图片。

程序可以调用如下代码,探测一张图片有多少张缩略图:
reader.getNumThumbnails(imageIndex);

如果存在缩略图,可以调用如下代码获取:
int thumbailIndex = 0;
BufferedImage bi;
bi = reader.readThumbnail(imageIndex, thumbnailIndex);

3.4 ImageWriter 类
就像我们可以用ImageIO 的一个方法获取某种图片格式的ImageReader对象一样,我们也可
以获取ImageWriter对象:
Iterator writers = ImageIO.getImageWritersByFormatName(“png”);
ImageWriter writer = (ImageWriter)writers.next();

一旦获取了一个ImageWriter对象,必须给它设置一个输出源ImageOutputStream。
File f = new File(“c:\images\myimage.png”);
ImageOutputStream ios = ImageIO.createImageOutputStream(f);
writer.setOutput(ios);

最后,可以把图片写入到输出源:
BufferedImage bi;
writer.write(bi);

3.4.1 写多图片文件
IIOImage类用于存储图片,缩略图或元信息的引用。下一节将讨论Metadata,目前,我们
简单地给Metadata相关参数传递null。
ImageWriter 类有一个方法write(),用于从IIOImage创建一个新文件,还有一个方法
writeInsert(),用于向一个已存在文件添加一个IIOImage对象。通过调用这两者,可以创
建一个多图片文件:
BufferedImage first_bi, second_bi;
IIOImage first_IIOImage = new IIOImage(first_bi, null, null);
IIOImage second_IIOImage = new IIOImage(second_bi, null, null);
writer.write(null, first_IIOImage, null);
if (writer.canInsertImage(1)) {
writer.writeInsert(1, second_IIOImage, null);
} else {
System.err.println(“Writer can’t append a second image!”);
}

3.5  处理 Metadata
所有与像素无关的信息,都属于在Metadata。javax.imageio.metadata 包含了用于访问
Metadata的类和接口。

Image I/O API 将stream metadata 和image metadata区别对待。stream metadata与一个
文件中存储了多张图片有关,image metadata只与单个图片有关。如果一个文件只包含一张
图片,那么就只存在image metadata。

可以通过调用ImageReader.getStreamMetadata 和 getImageMetadata(int imageIndex)来
获取metadata。这些方法会返回一个实现了IIOMetadata接口的对象,该对象会被向上转化
为ImageReader类型,

3.6 编码转换

3.7 事件监听

分类: 开源工具 标签:

Java质量检测评估工具

2010年3月31日 admin 没有评论

Java代码质量检测评估工具
“五大” 代码分析领域:
* 编码风格
* 冗余代码
* 代码覆盖率
* 依赖项分析
* 复杂度监控

一下列举了一些目前比较流行的工具。网址后面列出了其PR值,可以反映此工具的流行度。
1、编码风格
CheckStyle
Home page: http://checkstyle.sourceforge.net/ (6)
对应的eclipse插件有多个,其中eclipsecs最常用
Home page: http://eclipse-cs.sourceforge.net/ (6)
eclipse插件URL:http://eclipse-cs.sf.net/update/

2、冗余代码
Simian http://www.redhillconsulting.com.au/products/simian/ (5)
PMD 的 CPD http://pmd.sourceforge.net/cpd.html (5)

3、代码覆盖率
EMMA  http://emma.sourceforge.net/ (6)
Cobertura  http://cobertura.sourceforge.net/ (6)
EclEmma http://update.eclemma.org/ (5)
Coverlipse http://coverlipse.sourceforge.net/ (3)

4、依赖项分析
JDepend http://clarkware.com/software/JDepend.html (6)

5、复杂度监控
Metrics http://metrics.sourceforge.net/ (4)

具有以上两项或两项以上的综合工具(也称为静态分析工具):
1、PMD
Home page: http://pmd.sourceforge.net/ (6)
eclipse插件URL:http://pmd.sourceforge.net/eclipse

2、FindBugs http://findbugs.sourceforge.net/ (6)
eclipse插件URL:http://findbugs.cs.umd.edu/eclipse

FindBugs 检查程序生成的class文件,即分析字节码
PMD 检查源码,分析源代码

3、Jtest http://www.parasoft.com/jtest

4、Jlint http://artho.com/jlint/ (5)

5、Lint4j http://www.jutils.com/ (4)

参考资料:http://blog.csdn.net/cb_121/archive/2009/05/22/4208792.aspx

我个人平时最常用的是Checkstyle,其次是PMD,读者可以参考一下。

分类: 开源工具 标签:

使用pdfbox 抽取PDF文件中的文本

2010年3月28日 admin 没有评论
[code lang="java"]
package com.yanjiuyanjiu.search;

import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;

/**
 * 抽去PDF文件中的文本.
 * @author soulmachine
 *
 */
public final class PDFboxTest {
 /** 禁止创建对象. */
 private PDFboxTest() {
 }
 /**
 * 抽取PDF中的文本.
 * @param f PDF文件
 * @return PDF对应的文本字符串
 */
 public static String getText(final File f) {
 String text = "";
 try {
 PDDocument pdfdocument = PDDocument.load(f);
 PDFTextStripper stripper = new PDFTextStripper();
 stripper.setStartPage(1); // 只抽取第1页和第2页
 stripper.setEndPage(2);
 text = stripper.getText(pdfdocument);
 pdfdocument.close();

 } catch (IOException e) {
 e.printStackTrace();
 }

 return text;
 }

 /** 测试.
 *
 * @param args PDF文件路径
 */
 public static void main(final String[]  args) {
 File file = new File(args[0]);
 System.out.println(PDFboxTest.getText(file));
 }
}

[/code]

eclipse工程文件下载
分类: 开源工具 标签:

在Visual Studio 下编译 sqlite3

2009年4月14日 admin 1 条评论

首先,sqlite 官方已经有预编译好的DLL下载,如果你不需要特别优化的版本,直接下载官网上的DLL即可。你可以在下载 页面的 “Precompiled Binaries For Windows” 可以找到。
不过你想编译出自己的版本,比如添加优化参数后编译,debug版,或进行一些定制(例如官网这里 有一些预编译宏,允许你定制自己的sqlite),那么你就需要自己编译了。

首先在下载源代码,在页面的第一行就是,如 sqlite-amalgamation-3_6_12.zip ,接着下载编译好的DLL,我们主要是需要这里面的一个 sqlite3.def 文件,因为源代码里没有。一般下拉到  “Precompiled Binaries For Windows”  就可以看到,例如 sqlitedll-3_6_12.zip 。有了这两个压缩包就可以了。

首 先解压 sqlite-amalgamation-3_6_12.zip 到文件夹 sqlite3\,会得到  sqlite3.c,sqlite3.h,sqlite3ext.h 三个文件,然后解压 sqlitedll-3_6_12.zip ,把 sqlite3.def 移动到 sqlite3\ 下面。

打开 visual studio,新建一个空的dll工程,工程名为sqlite3,这样是为了能直接生成名为sqlite3.dll 的dll。然后sqlite3\  下的4个文件文件夹移动到此工程目录下,即与 sqlite3.vcproj 在同一级。
将 sqlite3.c 添加到工程,具体做法是右击“源文件”,选择“添加->现有项”,浏览到sqlite3.c即可。如下图所示。

undefined

阅读全文…

分类: 开源工具 标签:

qt 4.5 与visual studio 集成

2009年4月9日 admin 没有评论

本文主要讲述将Qt 4.5Visual Studio 2008集成,同样适用于Visual Studio 2005, 2003

Qt 4.5 虽然新增了LGPL协议,但这也阻碍了我们在VS中使用Qt。因为免费开源的版本只提供了GCC编译好的二进制库,而没有VC编译好的二进制库,只有商业版本才有VS编译好的针对WindowsDLLlib等二进制库(恩,可以理解)。

再者,VC编译器比GCC 还是要强劲很多,并且调试器异常强大。Qt Creator虽然很酷,目前还很粗糙。很多人也更为熟悉VS的界面。

下面我们就自己用VS编译出二进制库,然后就可以跟商业版一样了。

不过,你也可以直接google“qt 4.5 编译好”,找到很多人已经编译好的二进制库,下载下来直接用。下面的内容可以不看了^_^ 阅读全文…

分类: 开源工具 标签: