存档

2009年9月 的存档

工作要有规划,生活也要有规划。

2009年9月18日 468 views 没有评论
分类: 只言片语 标签:

“白银帝国”观后感

2009年9月16日 570 views 3 条评论

上周去文一路“物美”的翠苑电影大世界看了电影《白银帝国》。

评星:***

影评:女导演,拍得比较感性。

自由、平等、人性本源,是导演要宣扬的现时代理念。

商战、权谋等内容展现不足,显得有些无力。

至于情感纠结,伦理道德,比雷雨还是简单多了。

总的来讲,演员表演还都比较到位。



分类: 生活 标签:

用 ImageMagick 转换图片大小

2009年9月16日 802 views 没有评论

ImageMagick 是一套很好的图片处理工具包,而且开源免费,使用非常广泛。

贴一个转换图片大小的命令,可以批量的对很多文件进行瘦身,比较实用。

Linux 下:

find . -name '*.JPG' -print -exec convert {} -resize 1024x768 ../resized_1024x768/{} \;

Windows 下:

for %I in (*.jpg) do convert %I -resize 1024x768 ..\resized_1024x768\%I

Windows Cygwin 下:

find . -iname "*.jpg" | xargs -l -i convert -resize 800x600 {} ../resized_800x600/{}


另外,因为镜头的横拍和竖拍的关系,有些图像是侧的,需要90度翻转下,不然就得把脑袋侧过来看了:-)

也有个命令行的小工具 jhead 可以帮助自动的校正图像的翻转,需要注意的是还需要配合 jpegtran,把两个小工具下载放到在 %PATH% 中的某个目录下,然后执行下面的命令就好了。

# Windows / Linux 处理当前目录中的图片
jhead -autorot *.jpg
 
# Windows 下处理当前目录及子目录中的图片
jhead -autorot **\*.jpg
 
# Linux 下处理当前目录及子目录的图片。 注意 JPG 大小写
find ./ -name '*.JPG' -exec jhead -autorot {} {} \;


除了改变图像旋转之外,jhead 还可以通过命令行提取和修改图像的 Exif 信息,具体用法见其主页,这里也提供下打包下载

当然,使用一些其他的工具也是可以实现同样的目的的。方法有很多种,不管黑猫白猫,抓到老鼠的就是好猫。这几个命令的好处是比较方便写批量的脚本。


分类: 技术 标签: ,

在 Java 程序中释放 RMI 端口

2009年9月14日 1,006 views 没有评论

通过 LocateRegistry.createRegistry(port) 创建了一个 rmiregistry 监听 port 所在端口,

如果想要在程序中把这个端口关闭,也就是关闭 RMI registry 服务,可以参考以下的代码。

注:似乎在2003年的时候,这个方法还行不通,到了 JDK6 的版本才解决这个问题的。

参考 Sun bug 4457683bug 4508962, 以及 这个 mail archive


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.rmi.NoSuchObjectException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
 
public class RMITest {
 
	public void testRMIPortRelease() {
		System.out.println("Testing port release");
 
		System.out.println("Acquiring port... ");
		Remote reg = null;
		try {
			reg = LocateRegistry.createRegistry(1102);
		} catch (RemoteException ex) {
			ex.printStackTrace();
		}
 
		System.out.println("releasing port... ");
		try {
			java.rmi.server.UnicastRemoteObject.unexportObject(reg, true);
		} catch (NoSuchObjectException ex1) {
			ex1.printStackTrace();
		}
		reg = null;
	}
 
	public static void main(String[] args) {
		RMITest s = new RMITest();
		s.testRMIPortRelease();
	}
}


分类: 技术 标签: ,

[转] Java Prime number check

2009年9月10日 727 views 没有评论

原文出处: http://ventrix.nsdc.gr/code_folds/2008/10/07/java-prime-number/

Information about the author: http://kospol.nsdc.gr/


========================================================================

This is one approach to check if the given number is a prime number. It can take a very big number as an argument. It uses no threads and has no comments. Think it as version 0.01.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 *      Prime.java
 *
 *      Copyright 2008 Ventrix <ventrix@gmail.com>
 *
 *      http://ventrix.nsdc.gr/code_folds/
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */  
 
import java.math.BigInteger;  
 
public class Prime {  
 
    private static long start;
    private static long end;  
 
    public static void main(String[] argv) {
        boolean isprimen;
        //http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html#isProbablePrime(int)
        //http://primes.utm.edu/lists/small/small.html
        //for i in `seq 1 1000`; do java Prime $i >> primes; done
        //cat primes | grep "is a"
        start = System.currentTimeMillis();
        try {
            BigInteger bigNumber = new BigInteger(argv[0]);
            if (bigNumber.compareTo(new BigInteger("2147483647")) == 1) {
                if (bigNumber.compareTo(new BigInteger("9223372036854775807")) == -1) {
                    Long longNumber = new Long(argv[0]);
                    bigNumber = null;
                    isprimen = isNorPrime(longNumber);
                } else {
                    isprimen = isBigPrime(bigNumber);
                }
            } else {
                bigNumber = null;
                Integer intNumber = new Integer(argv[0]);
                isprimen = isPrime(intNumber);
            }  
 
            if (isprimen) {
                System.out.println(argv[0] + " is a prime!");
            } else {
                System.out.println(argv[0] + " is NOT a prime!");
            }
            end = System.currentTimeMillis();
            System.out.println("Completed in +" + (end - start) + "ms");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }  
 
    private static boolean isBigPrime(BigInteger number) {
        System.out.println("You gave me a BIG number");
        BigInteger[] remain;
        remain = number.divideAndRemainder(new BigInteger(new Integer("2").toString()));
        if (remain[1].compareTo(new BigInteger("0")) == 0) {
            return false;
        }
        remain = number.divideAndRemainder(new BigInteger(new Integer("3").toString()));
        if (remain[1].compareTo(new BigInteger("0")) == 0) {
            return false;
        }
        int y = 2;
        int x = (int) Math.sqrt(number.doubleValue());
        for (int i = 5; i <= x; i += y, y = 6 - y) {
            remain = number.divideAndRemainder(new BigInteger(new Integer(i).toString()));
            if (remain[1].compareTo(new BigInteger("0")) == 0) {
                return false;
            }
        }
        return true;
    }  
 
    private static boolean isNorPrime(Long number) {
        System.out.println("You gave me a normal number");
        if (number % 2 == 0) {
            return false;
        }
        if (number % 3 == 0) {
            return false;
        }
        int y = 2;
        int x = (int) Math.sqrt(number);
        for (int i = 5; i <= x; i += y, y = 6 - y) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }  
 
    private static boolean isPrime(Integer number) {
        System.out.println("You gave me a small number");
        if (number < 2) {
            return false;
        }
        if (number == 2) {
            return true;
        }
        if (number % 2 == 0) {
            return false;
        }
        if (number == 3) {
            return true;
        }
        if (number % 3 == 0) {
            return false;
        }
        int y = 2;
        int x = (int) Math.sqrt(number);
        for (int i = 5; i <= x; i += y, y = 6 - y) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }
}//class</ventrix@gmail.com>


分类: 技术 标签:

Windows XP 下 Chrome 浏览器 SOCKS 代理设置

2009年9月10日 1,968 views 没有评论

时间真的过的很快,Google Chrome 浏览器出来也有一年多了。一出来的时候就装了用过,却发现还是有很多待完善的地方,很多方面还是比不上 Firefox,也不是很稳定,除了速度快这个最大的优点以外。

但是最近重新装了 3.0.x 的 DEV 版和 4.0.x BETA 版的 Chrome 以后,真的觉得很不错,浏览器本身的速度和打开网页的速度仍旧很快,甚至更快了,而且一些以前棘手的问题也在一个个的被消灭了,比如这个点击 Tab 会导致到另外一个独立的 Window 的bug,也可以像 Firefox 一样点击 Ctrl + Shift + T 打开之前关闭的 Tab 页了,对 Linux 的支持也越来越好,用了原生的 GTK;MAC 的版本也在稳步前进中,一些新的功能比如插件的支持也在实现了并在不断的完善中,开发文档也发布了,等等等等。所以最近用 Chrome 越来越多,其他的浏览器反而少了。

不过还是有个问题非常困扰,就是不支持 SOCKS 代理。因为在公司上网,由于政策的限制,有些网站是被屏蔽的,幸好有一些代理可以用。IE 下用 PAC 文件代理设置,只要类似于 “SOCKS x.x.x.x:1080” 就可以了,Firefox 下用插件 FoxyProxy,问题都不大。

Chrome 的代理设置用的是跟 IE 一样的系统代理设置,结果发现通过 SOCKS 代理出去的时候,总是报错:

  • 错误 320 (net::ERR_INVALID_RESPONSE): 未知错误。

所以访问那些被屏蔽的网站,都需要特地在开 IE 才行,很是不方便。

后来注意到其他人给 Chrome 提的那个 issue 被解决了,但是试过,Windows 下还是不行,Linux 下倒是可以的了。

再过了半个月,看这个问题就要沉下去了,就也去那里提了自己的问题, 在跟回复的人讨论了之后,才发现了一个解决的办法,其实只要用 “SOCKS5 x.x.x.x:1080” 就可以了,其中一定要写上 5 这个版本。

办法虽然是找到了,但其实还是有两个疑问的:

  1. 为什么 IE 下面不用配置 socks5 的版本但是代理也是用的好好的?
  2. 即使这个方案,也还是不够完善,代理工作的并不是很稳定,时好时坏,坏的时候,点“刷新”,网卡上都抓不到包的,也就是说 Chrome 并没有发出浏览的请求包。

不管怎样,总算是找到了一个让 WIndows 下 SOCKS 代理工作的办法了,大部分时候也都还是可以用的。

真的是希望自己也有能力,可以把第2个问题自己查出来解决掉,呵呵。


分类: 技术 标签: , ,

下班回家是个问题

2009年9月9日 683 views 1 条评论

自从公司调整,城西到滨江的接送车班次也减少了,从此下班回家就成了一个很大的问题。

The long line of traffic - 1

已经连续好多次有在公司等车等半个小时到一个小时才等到车过来的事情发生,都是因为司机晚点了或是车坏了。

昨天就是,打算坐 18:20 的车回的,结果车出故障开去维修厂了;而下一趟 18:40 的等到 50 才过来,整整耽搁了半个小时。

于是想今天早点回,第一次坐 18:00 的车试试看,结果又是不顺。

这一趟车倒是确实还比较准时,不过开到快到一桥的时候就不对劲了,前面的车堵的相当的厉害,跟司机聊,说今天这个路况还算好的,那好吧,毕竟第一次坐这趟车,心想司机应该比我们有经验吧。可等起起停停到了一桥中间的时候,整个队伍就干脆停滞不动了。这一停就是半个小时。

应该是前面出故障了,否则不会这样的。不过我们也确实够倒霉的。 :(

好的一面是下车欣赏了会夜晚的江景。 :)

The long line of traffic - 2

白天还在公司说起,现在早晚的路况都很差,路上花的时间比以前要多十几二十分钟,不知道是因为今年车市的火爆,或是跟阿里搬到滨江也有关系。

唉,现在下班回家真是个问题了。



分类: 日志 标签: ,

[转] Wireshark的Pcap文件格式分析

2009年9月7日 1,937 views 没有评论

转自:http://blog.chinaunix.net/u2/82392/showart_1870732.html

前段时间因工作要求,需要对各种数据包进行分析和操作,内容涉及网路协议分析,socket,文件操作等。在此分享下学习和实践的经验。

首先介绍下网络抓包、协议分析的必备软件Ethereal,新版(Wireshark)以下还以 Ethereal代之,目前最新版本已经支持在无线局域网抓包了。Linux和Windows均有对应安装包,它们分别是gcc和VC++编译的。不过 Windows下是基于Winpcap而Linux下则是Libcap。Ethereal作为网路协议分析、学习、开发的敲门软件,其使用技巧及其原理机 制(BPF)网上都有比较详尽的介绍,当初我收集的相关资料随后也会上传,不再多说。下面主要介绍下Ethereal默认的*.pcap文件保存格式。

Pcap文件头24B各字段说明:

Magic:4B:0x1A 2B 3C 4D:用来标示文件的开始
Major:2B,0×02 00:当前文件主要的版本号
Minor:2B,0×04 00当前文件次要的版本号
ThisZone:4B当地的标准时间;全零
SigFigs:4B时间戳的精度;全零
SnapLen:4B最大的存储长度
LinkType:4B链路类型
常用类型:
0 BSD loopback devices, except for later OpenBSD
1            Ethernet, and Linux loopback devices
6            802.5 Token Ring
7            ARCnet
8            SLIP
9            PPP
10           FDDI
100         LLC/SNAP-encapsulated ATM
101         “raw IP”, with no link
102         BSD/OS SLIP
103         BSD/OS PPP
104         Cisco HDLC
105         802.11
108         later OpenBSD loopback devices (with the AF_value in network byte order)
113         special Linux “cooked” capture
114         LocalTalk
 
Packet 包头和Packet数据组成
字段说明:
Timestamp:时间戳高位,精确到seconds
Timestamp:时间戳低位,精确到microseconds
Caplen:当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
Len:离线数据长度网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
Packet 数据:即 Packet(通常就是链路层的数据帧)具体内容,长度就是Caplen,这个长度的后面,就是当前PCAP文件中存放的下一个Packet数据包,也就 是说:PCAP文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,下一组数据在文件中的起始位置。我们需要靠第一个Packet包确定。 最后,Packet数据部分的格式其实就是标准的网路协议格式了可以任何网络教材上找得到。
 



========================================================

这里再把pcap文件头的结构定义添上:

typedef unsigned long  DWORD;
typedef unsigned short  WORD;
typedef unsigned char  BYTE;
 
typedef struct PCAP_FILE_HEADER
{
 DWORD magic;
 WORD versionMajor;
 WORD versionMinor;
 DWORD thisZone;
 DWORD sigfigs;
 DWORD snapLen;
 DWORD linkType;
}PcapFileHeader, *PPcapFileHeader;


2011-02-17 补充两篇文章:

1)解析Winpcap截获的数据包

2)以太网帧类型速查表

分类: 技术 标签:

Wireshark hub 下抓不到包问题解决

2009年9月7日 1,446 views 1 条评论

在同一个 hub 下接笔记本和机顶盒(STB),需要在笔记本上抓包查 STB 的问题。

如果不用 capture filter ,能抓到经过 hub 的所有的包,包括 http 的。

因为包太多,想只过滤出 http 的包用于分析,于是加 capture filter 为 “port 80“, 结果一个包都抓不到了。

尝试了各种办法,都没有结果。于是到 Wireshark 的 maillist 发帖求助,很快就有了结果

原来因为所接的 Hub 其实是电信的 Adsl 猫,有四个 RJ45 网口, STB 是通过猫拨号上网的,所以 capture filter 需要用 “pppoes && port 80“,其中的 pppoes 不可少!

从刚开始以为是 Wireshark 的一个 bug,到发帖求助,到得到结果,也就是短短几天的时间。

在这个过程中,对网络方面的知识也有了更多一点的了解。开源社区确实很好很强大,真正的牛人专家很多,参与其中确实能学到很多的知识。


分类: 技术 标签: ,

不顺利的一天

2009年9月4日 492 views 1 条评论

今天对我和包包都是不顺利的一天。

白天在公司,各自都和其他的同事有争执,并都是属于那种本来并不完全是自己的职责范围之内,提出来是为了以后的改进的考虑,结果都遭到了反对。尽管事情并不大,但是心里都有些不快。

下班坐402去吴山广场,先是等车等了有20多分钟,然后车开到海潮路,熄火了之后再也点不着了!

不想耽搁耗着,打车过去了。

接下来总算还好,刻了章,吃了饭,写了藏头诗。

看着时间的,去吴山广场的西面坐25路去了,看是包包的手表。末班车是21:40,还来得及。

结果又是等了20多分钟还不见车来,看表上40已经过了,接着发现,表慢了半个小时!只能打车回了城西。

。。。

真的是,人不顺,喝凉水都塞牙,什么都掉链子,算是最近这阵最不顺的一天了,也是难得,记录之。


分类: 日志, 生活 标签: