Posts tagged Tool
Nausicaa:一个把图片传到Flickr的命令行工具
0懒惰是程序员的美德
前几天看了一片博客,灵感一现,发现平时发博客的时候,把图片传到图床上去要打开浏览器,再打开Flickr或者Yupoo,再上传照片,再找到照片对应的链接,然后这个链接才能够拿来用。看看吧,这个过程是多么的繁琐,作为一名把懒惰当成第一美德的程序员,我马上就想要折腾出一个命令行工具,来把图片上传到相应的图床,现在这个工具就是Nausicaa。
运行效果
那么,来看看上传的效果吧:
Nausicaa在你把图片上传之后,会把图片对应的各个尺寸的静态链接也返回回来,让你可以马上拿到图片的链接。
环境
要使用Nausicaa,最好在Unix-like系统下使用(Windows下谁会去用命令行?)。
另外Nausicaa还需要JRE 6或者以上的版本。
下载与使用
Nausicaa的下载地址是:https://github.com/downloads/khotyn/Nausicaa/nausicaa.jar
使用说明,可以直接进项目主页看:https://github.com/khotyn/Nausicaa
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你需要
- JRE环境
- *nix系统,不支持windows也不会支持windows
- 下载varamyr.jar
如何使用?
- 运行命令:
java -jar varamyr.jar <path-to-epub-file>,<path-to-epub-file>为你需要修改的epub文件的路径 - 看看在你修改的epub文件的路径下是不是多了一个类似
xxxx-varamyr.epub的文件。
源代码 & 原理
- 源代码放在github上了:https://github.com/khotyn/Varamyr
- 原理很简单,不用讲了,直接看源代码吧。
BTrace学习笔记
2BTrace介绍
BTrace是一个Java的动态跟踪工具,相当于DTrace(一个Solari的工具,用于跟踪内核调用等等) for Java,BTrace的工作的基本原理是把跟踪的代码动态替换到被跟踪的Java程序内,其项目主页是:http://kenai.com/projects/btrace
安装BTrace
BTrace的安装非常简单:
- 首先,你需要下载BTrace,其下载地址是:http://kenai.com/projects/btrace/downloads/directory/releases,最新的版本是1.2,可以选择下载1.2这个版本。
- 下载以后,解压到一个目录,可以选择将目录下的bin文件加入了PATH环境变量中去。
- 最后需要设置一下BTRACE_HOME这个环境变量
使用BTrace
BTrace的使用也是非常简单,用下面命令就可以使用:
btrace <pid> Test.java
其中,pid为你想要跟踪的Java程序的pid,Test.java为BTrace的脚本,下面就来看看一个简单的计算方法调用时间的BTrace脚本,首先看看被跟踪的Java程序的代码:
package com.khotyn.test;
import java.util.concurrent.TimeUnit;
/**
* Hello world!
*/
public class A {
public static void main(String[] args) throws InterruptedException {
A a = new A();
while (true) {
TimeUnit.SECONDS.sleep(1);
a.say();
}
}
public void say() {
System.out.println("Hello, world");
}
}
我要跟踪每次调用say方法都耗费了多少时间,看看对应的BTrace脚本:
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
class BTraceTest {
@OnMethod(clazz="com.khotyn.test.A",method="say",location=@Location(value=Kind.RETURN))
void func(@Duration long duration) {
println(duration);
}
}
- 其中,代码中的@BTrace代表这是一个BTrace脚本。
- @OnMethod指定跟踪的类和方法是什么,这里执行跟踪com.khotyn.test.A的say方法
- @Location制定跟踪的位置是哪里
- @Duration将方法的调用时间收集到后面声明的long变量duration上
- 最后,println是BTraceUtils的内置工具类,用于向控制台打印消息。
要了解BTrace使用方面更多的内容,请参考它的用户手册:http://kenai.com/projects/btrace/pages/UserGuide
豆瓣Chrome插件–显示我的豆瓣
0豆瓣的导航栏上竟然没有我的豆瓣的链接,这让我一直很困扰,所以晚上我就动手写了一个小插件,用于为豆瓣的头部导航栏加上一个“我的豆瓣”的链接,让你在豆瓣的任何频道都可以非常方便地回到“我的豆瓣”,插件的效果如下:

当然插件本身并没有什么技术含量,代码也就几行而已,如果你觉得你也正好有这个需求,那么尽管拿去玩,插件的下载地址是:https://github.com/downloads/khotyn/Show-My-Douban/Show-My-Douban.crx
一个快速合并svn工程的脚本
0最近的一个项目中,经常需要拿开发分支和主干做合并,分支数量有比较多,不胜其烦,故而写了一个小脚本用来做分支的合并:
#!/bin/sh
versions=`svn log $2 --stop-on-copy | grep '^r[0-9]*' | awk '{print $1}'`
head_version=`echo $versions | awk '{print $1}' | grep -o '[0-9]*$'`
tail_version=`echo $versions | awk '{print $NF}' | grep -o '[0-9]*$'`
merge_cmd="svn merge -r $tail_version:$head_version $2 ."
echo 'Preparing environment:'
rm -rf khotyn_tmp && mkdir khotyn_tmp && cd khotyn_tmp
echo "Preparing environment done!\nChecking out $1"
svn co $1 .
echo "Checking out $1 done!\nMerging branches:$merge_cmd"
$merge_cmd
echo "Merging branches done:$merge_cmd"
使用的方式如下:
sh svnMerge.sh repo_1 repo_2
这样就会将repo_2分支合并到repo_1上去,觉得有用的朋友可以直接拿去改改用起来。