最近几天玩数独游戏。发现在电脑上玩还是不方便。
难怪很多日本人都是买的数独的书在电车上玩。
为了自己玩方便,最近写了一个小程序,利用SudokuExplainer
生成数独。再用iText打印成PDF来玩。
这个程序放在GoogleCode上。
http://code.google.com/p/sudoku-pdf
截图
星期三, 十月 22, 2008
修改Bazaar的bzr-email成Server-side hook.
bzr用插件来实现Hook的功能,用起来实在是不方便。为了在每次提交的时候都有邮件通知,从Lunchpad上下在bzr-email插件。
bzr co lp:bzr-email
cd bzr-email
./setup.py install
这样可以安装到系统级别,如果只是自己用的话,安装到~/.bazaar/plugins(WINDows是另外的目录)。
在要使用这个插件的分支的.bzr/branch/branch.conf文件里加入配置参数
post_commit_to = someone@example.com
post_commit_sender = bzr@example.com
post_commit_mailer = smtplib
smtp_server = mail.example.com
发现本地提交的时候能发送邮件,但是远程通过bzr+ssh提交是不能触发。而且这个只是post_commit的Hook,在PUSH的时候恐怕也不会触发。
一通搜索发现,bzr的文档实在是不完整,很多新功能没有好的文档。还好找到了一个BUG日志
有查看了branch.py的源代码。
把bzr-email的__init__.py按如下patch修改。
=== modified file '__init__.py'
--- __init__.py 2008-08-05 21:51:27 +0000
+++ __init__.py 2008-10-22 09:38:12 +0000
@@ -86,16 +86,19 @@
_emailer.EmailSender(master, new_revid, master.get_config(),
local_branch=local).send_maybe()
+def post_change_branch_tip_hook(params):
+ """Hook for email. """
+ _emailer.EmailSender(params.branch, params.new_revid, params.branch.get_config()).send_maybe()
def install_hooks():
"""Install CommitSender to send after commits with bzr >= 0.15 """
install_named_hook = getattr(Branch.hooks, 'install_named_hook', None)
if install_named_hook is not None:
- install_named_hook('post_commit', branch_commit_hook, 'bzr-email')
+ install_named_hook('post_change_branch_tip', post_change_branch_tip_hook, 'bzr-email')
else:
- Branch.hooks.install_hook('post_commit', branch_commit_hook)
+ Branch.hooks.install_hook('post_change_branch_tip', post_change_branch_tip_hook)
if getattr(Branch.hooks, 'name_hook', None) is not None:
- Branch.hooks.name_hook(branch_commit_hook, "bzr-email")
+ Branch.hooks.name_hook(post_change_branch_tip_hook, "bzr-email")
def test_suite():
改完之后的bzr-email可以作为server-side的hook使用。而且push和commit的时候都可以触发发送邮件。
bzr co lp:bzr-email
cd bzr-email
./setup.py install
这样可以安装到系统级别,如果只是自己用的话,安装到~/.bazaar/plugins(WINDows是另外的目录)。
在要使用这个插件的分支的.bzr/branch/branch.conf文件里加入配置参数
post_commit_to = someone@example.com
post_commit_sender = bzr@example.com
post_commit_mailer = smtplib
smtp_server = mail.example.com
发现本地提交的时候能发送邮件,但是远程通过bzr+ssh提交是不能触发。而且这个只是post_commit的Hook,在PUSH的时候恐怕也不会触发。
一通搜索发现,bzr的文档实在是不完整,很多新功能没有好的文档。还好找到了一个BUG日志
有查看了branch.py的源代码。
把bzr-email的__init__.py按如下patch修改。
=== modified file '__init__.py'
--- __init__.py 2008-08-05 21:51:27 +0000
+++ __init__.py 2008-10-22 09:38:12 +0000
@@ -86,16 +86,19 @@
_emailer.EmailSender(master, new_revid, master.get_config(),
local_branch=local).send_maybe()
+def post_change_branch_tip_hook(params):
+ """Hook for email. """
+ _emailer.EmailSender(params.branch, params.new_revid, params.branch.get_config()).send_maybe()
def install_hooks():
"""Install CommitSender to send after commits with bzr >= 0.15 """
install_named_hook = getattr(Branch.hooks, 'install_named_hook', None)
if install_named_hook is not None:
- install_named_hook('post_commit', branch_commit_hook, 'bzr-email')
+ install_named_hook('post_change_branch_tip', post_change_branch_tip_hook, 'bzr-email')
else:
- Branch.hooks.install_hook('post_commit', branch_commit_hook)
+ Branch.hooks.install_hook('post_change_branch_tip', post_change_branch_tip_hook)
if getattr(Branch.hooks, 'name_hook', None) is not None:
- Branch.hooks.name_hook(branch_commit_hook, "bzr-email")
+ Branch.hooks.name_hook(post_change_branch_tip_hook, "bzr-email")
def test_suite():
改完之后的bzr-email可以作为server-side的hook使用。而且push和commit的时候都可以触发发送邮件。
星期五, 十月 17, 2008
SSH访问局域网内的机器
SSH有TUNNELS功能,一直没有用过。最近有一个工作上的事情只能用公司的机器做,对方限制了访问IP。
想了想远程控制公司里的机器不就可以在任何地方都用了吗?
远程控制的话如果暴露端口就太危险了。目前在众多网络服务中比较信任的就是SSH了。
在公司的服务器上安装最简单的debain。(装在colinux里,公司的服务器都是WIN。)
下载putty。
用PUTTYGEN.EXE生成密钥对,把PUBKEY拷贝出来,注意保存成文件不能被OPENSSH识别,authorized_keys里必须一行一个key,保存成文件就不止一行了。
把PUBKEY添加到服务器的~/.ssh/authorized_keys里面。
修改/etc/sshd_config,设置PasswordAuthentication no
安装denyhosts。(apt-get install denyhosts)
用PUTTY连接服务器时在选项里Connection->SSH->Auth里加上privatekey的路径。在Tunnels里加入本地的端口如4489到远程的局域网里的机器TargetHost:3389
3389为Windowx远程桌面的端口,所以在目标机器上要打开远程桌面,并且用户要有远程桌面的权限。
如果机器关着就不好用了,所以目标机器的BIOS里打开WOL(Wake on LAN)远程唤醒功能。
在服务器上安装wakeonlan程序。(apt-get install wakeonlan)以后再关机的时候只要wakeonlan 目标机器的MAC就能开机。
实际试验非常成功,远程桌面连接是在机器里输入localhost:4489就连到目标机器了。
想了想远程控制公司里的机器不就可以在任何地方都用了吗?
远程控制的话如果暴露端口就太危险了。目前在众多网络服务中比较信任的就是SSH了。
在公司的服务器上安装最简单的debain。(装在colinux里,公司的服务器都是WIN。)
下载putty。
用PUTTYGEN.EXE生成密钥对,把PUBKEY拷贝出来,注意保存成文件不能被OPENSSH识别,authorized_keys里必须一行一个key,保存成文件就不止一行了。
把PUBKEY添加到服务器的~/.ssh/authorized_keys里面。
修改/etc/sshd_config,设置PasswordAuthentication no
安装denyhosts。(apt-get install denyhosts)
用PUTTY连接服务器时在选项里Connection->SSH->Auth里加上privatekey的路径。在Tunnels里加入本地的端口如4489到远程的局域网里的机器TargetHost:3389
3389为Windowx远程桌面的端口,所以在目标机器上要打开远程桌面,并且用户要有远程桌面的权限。
如果机器关着就不好用了,所以目标机器的BIOS里打开WOL(Wake on LAN)远程唤醒功能。
在服务器上安装wakeonlan程序。(apt-get install wakeonlan)以后再关机的时候只要wakeonlan 目标机器的MAC就能开机。
实际试验非常成功,远程桌面连接是在机器里输入localhost:4489就连到目标机器了。
星期三, 十月 15, 2008
用ant同步文件夹
经常在多台电脑上工作,有些文件会需要同步。
对于一般的工作文件,用版本控制系统可以完成,我的源代码都是用bazaar来管理,以前使用SVN的。
有些文件我不纳入版本管理,比如我的maven仓库,我没有服务器,所以没有maven代理。这些jar包我不想把它纳入版本控制。换机器的时候我也不希望再从网上下载一次。以前我都是把我的.m2文件夹拷贝到移动硬盘,再从移动硬盘拷到要用的机器上。
XP的拷贝实在不适合拷贝大量的小文件,而且每次都覆盖也没有必要。所以想用增量拷贝工具。想到了rsync以前用过,好像在路径名太长是会出问题,而且cygwin的rsync对于中日英混合的文件名处理也会出问题。
由于一直用Java开发,想到ant有一个sync的任务,反正ant在我的每台机器上都是必备的。
所以利用它来同步我的文件,应该是个理想的方案。
这是我的build文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="nexus" default="sync">
<target name="check" description="check dest property." >
<condition property="run">
<and>
<isset property="dest" />
</and>
</condition>
</target>
<target name="usage" depends="check" description="usage of this build file" unless="run">
<echo>
ant -Ddest=<destPath>
</echo>
</target>
<target name="sync" depends="usage" if="run" description="Sync files between usb disk">
<echo message="sync to ${dest}" />
<sync todir="${dest}" verbose="true" granularity="500">
<fileset dir="."/>
</sync>
</target>
</project>
对于一般的工作文件,用版本控制系统可以完成,我的源代码都是用bazaar来管理,以前使用SVN的。
有些文件我不纳入版本管理,比如我的maven仓库,我没有服务器,所以没有maven代理。这些jar包我不想把它纳入版本控制。换机器的时候我也不希望再从网上下载一次。以前我都是把我的.m2文件夹拷贝到移动硬盘,再从移动硬盘拷到要用的机器上。
XP的拷贝实在不适合拷贝大量的小文件,而且每次都覆盖也没有必要。所以想用增量拷贝工具。想到了rsync以前用过,好像在路径名太长是会出问题,而且cygwin的rsync对于中日英混合的文件名处理也会出问题。
由于一直用Java开发,想到ant有一个sync的任务,反正ant在我的每台机器上都是必备的。
所以利用它来同步我的文件,应该是个理想的方案。
这是我的build文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="nexus" default="sync">
<target name="check" description="check dest property." >
<condition property="run">
<and>
<isset property="dest" />
</and>
</condition>
</target>
<target name="usage" depends="check" description="usage of this build file" unless="run">
<echo>
ant -Ddest=<destPath>
</echo>
</target>
<target name="sync" depends="usage" if="run" description="Sync files between usb disk">
<echo message="sync to ${dest}" />
<sync todir="${dest}" verbose="true" granularity="500">
<fileset dir="."/>
</sync>
</target>
</project>
订阅:
博文 (Atom)