2015年3月31日星期二

Swift Hash&Convert,写了第一个Mac小程序


README

Swift Hash&Convert

https://github.com/yaoxinghuo/SwiftHash
Hash&Convert app for Mac, for develop use, written in swift.

Main Features

  • Hash file, you can drop your file to the drop zone
  • Hash or convert String by input
  • Lower case or Upper case hash result
  • Compare hash result with your desired result
  • Copy hash result to clipboard
  • Remember last algorithm when start

Supported Hash Algorithm

  • MD5
  • SHA1
  • SHA224
  • SHA256
  • SHA384
  • SHA512
  • CRC32

Supported Convert Types

  • Decimal to Hex String
  • Hex to Decimal String
  • String to Base64
  • Base64 to String

Screen Shot

demo

License

Swift Hash&Convert is distributed under the Apache License version 2. Please read the file LICENSE for more details.

2013年12月6日星期五

开发了一个显示字符弹出框编辑器的 Eclipse小插件:String Edit for Eclipse 1.0.1

Update 2013-12-07 更新插件版本1.0.1 优化弹出框布局,更加好看

Xcode 下有个文本插件https://github.com/holtwick/HOStringSense-for-Xcode 对于要输入和编辑长文本的开发者非常好用,直接弹出一个 Popup 框,在里面就可以方便的编辑文本了,受到他的启发,同时也参考了https://github.com/kbss/StringUtils_plugin这个项目,自己开发了一个 Eclipse 下的类似功能的插件,按照国际惯例,开源之: https://github.com/yaoxinghuo/StringEditEclipse



主要功能如图
1)在 java 代码的变量文本上,按住 Ctrl+鼠标单击(MAC 是 Cmd+单击),或者按快捷键(Ctrl+Alt+M,mac是 Cmd+Alt+M),或者点右键,在右键菜单找到"String Edit",程序会自动找出有文本的地方,进而判断是否弹出编辑器;
2)弹出如图的编辑器,编辑器中直接显示转义前的文本,方便阅读和编辑,在编辑器中的改动会实时修改并转义保存到变量中;
3)还可以复制文本,比直接在变量中复制的优点是不会复制成转义后的文本;
4)通过复选框Unicode String Format,可以选择是否将变量中的中文保存成 Unicode,如勾选后,就变成String sql = "insert into test(id, name, age, sex)\n" + "values(1, \"\u5C0F\u660E\", 18, \"male\");"。

最后给出 离线zip 包安装地址:http://pan.baidu.com/s/1Aahwz 或 http://sdrv.ms/196Ykus

Multi-Line Popup String Editor plugin for eclipse
When edit java source file in eclipse, meet string variable, ctrl+click(mac is cmd+click, or hit Ctrl/Cmd+Alt+M or right mouse click show context menu, select "String Edit"), will popup a multi-line string editor window, all the changes with this editor will sync to the main editor and escape the strings. Can also copy the original string to clicpboard. Have the option whether to escape the Chinese to unicode.
Offline install zip package can be downloaded from here: http://sdrv.ms/196Ykus orhttp://pan.baidu.com/s/1Aahwz


2013年5月25日星期六

开发了一个eclipse小插件,每次关闭eclipse时,自动关掉打开着的文件

平时开发一直用eclipse,就有个问题,每次打开eclipse容易卡住,都是上一次关eclipse的时候有开着的文件,导致每次打开eclipse也会去加载,而加载的时候,就经常卡住了,google了半天也没搞出解决方案,那索性换个思路,能否在eclipse关掉前,自动关掉所有打开着的文件,(也可以自己手动关,不过经常会忘记)又是一顿google狂找,竟然eclipse也没有这个选项。
所以自行研究了一下eclipse的插件,倒是能做到,而且也很简单,这里共享出来,给有需要的人看下,当然如果你是eclipse的插件老手,就不用看了,可能太小儿科了:)

以下是源代码:
https://code.google.com/p/terrycode/source/browse/#svn%2Ftrunk%2Fexitclose

以下是编译好的插件文件(直接把jar放到eclipse/dropin下就可以了)
https://docs.google.com/file/d/0B0W7RjU4e3Q3R05rc0ZJZWV2QTg/edit?usp=sharing

2011年12月4日星期日

免费天气预报weatherlib部署方法(1-23更新)

     2013-1-23 Update:

网友需求,在邮件后面不要加上“管理订阅XXX”,我修改了一下代码,另外上传了一个weatherlib_nohelp.zip 也是在同样下载的地方

     2012-6-25 Update:

网友反映无法部署,根据提示,是因为GAE升级了,需要在appengine-web.xml 第四行(<version>4</version>)后面加入以下一行:<threadsafe>true</threadsafe>

  2011-12-10 Update:

更新程序,天气邮件中的网址http://weather.terrynow.com改成各自的http://yourappid.appspot.com
说明:
1) 如果您部署本程序,如果修改首页,希望你能保留我的博客等版权信息和广告的内容(当然也不能强迫哈)
2) 现在程序默认总定制数是80个,单个用户的定制数是10个,考虑到总的邮件数是100,另外还有发送验证邮件、测试邮件或者发送错误重新发送等原因,总定制数为80,如果你要修改总定制数,可以搜索代码里出现的80的地方改成你想要的数字(少于100),单个用户的定制数默认是10,代码中可以改,或者到https://appengine.google.com后台,点击Datastore Viewer,找到Account下的账户,把slimit的数值,从10改成其他你想要的。

2011-12-9 Update:

  1.       更新代码修正有时无法查询天气的问题
  2.       更新代码修正只能发送测试邮件,无法定时发送的问题
  3.       可以用war包上传办法,从而不需要Eclipse了,详见最后的说明

      自Google把免费配额降低后(一天只能发100封邮件),本人就打算放弃这个项目了,不过还是有很多热心网友一直询问进展,我也是忙着忙那,来不及管这些,不过zhen zhao 网友一直不懈努力,终于搞出来了,呵呵,可喜可贺,并把他的一路忙下来的教程发给我,让我公布到博客上,这里也感谢这位网友!


1、 http://www.oracle.com/technetwork/java/javase/downloads/index.html,下载jdk,建议下载1.6(JDK6),默认安装。
2、 http://www.eclipse.org/downloads/,下载Eclipse,解压到D:。打开d:\eclipse,运行eclipse.exe,点help菜单下的install new softwore,在work with 填写http://dl.google.com/eclipse/plugin/3.7
(这里补充下,截图里的第三个GWT Designer for GPE可不用勾上)
漫长的等待,点下一步安装。

安装完成后Eclipse重启。图标G出现就安装成功了。呵呵,要有耐心哦。
2、 下载Google App Engine SDK for Java, https://code.google.com/intl/zh-CN/appengine/downloads.html,解压到D:
3、 下载weatherlib源代码(GoogleCode上的比较老了,请下载最新的,点这里),解压weatherlib。
4、 打开Eclipse的file下Import,  下一步。Browse找到weatherlib,点击finish。

5、 按ALT加ENTER键,Txt file encoding , 改成UTF-8

java Build path ,App Engine SDK,找到解压到D:的appengine-java-sdk-1.6.0导入,JRE system library 找到安装的JDK目录导入。


6、 
deploy to app engine , 改为自己的
,Deploy,成功了。





新增的war包部署方法:

1)同样需要下载JDK,详见上面步骤的第一步
2)下载Google App Engine SDK for java 详见第三步
3)点这里下载代码后,解压找到里面的war包,距离war包的地址是D:\weatherlib\war
修改D:\weatherlib\war\WEB-INF\appengine-web.xml 把这里的your_app_id 的your_app_id换成你实际的ID
4)开始-运行-cmd
切换到你的Google App Engine的SDK的目录的bin下:
比如


C:\Documents and Settings\user>e:
E:\>cd appengine-java-sdk\bin\
E:\appengine-java-sdk\bin>appcfg.cmd update D:\weatherlib\war


根据提示输入用户名和密码就可以了

2011年11月22日星期二

免费天气预报被迫暂停


本站因为Google App Engine收费于2011-11-07暂停服务(免费版本只能每天发送100封邮件),后续如果能找到其他办法,定会再开启服务,感谢各位两年多来的支持!再会!
本站提供源代码,如有需要请自行研究部署,但限于本人精力有限,不提供war包或者技术支持,请谅解!
另外有人问如何部署,我建议参考Google的官方文档(Java版),比较详细
http://code.google.com/intl/zh-CN/appengine/docs/java/overview.html

2011年3月4日星期五

Java判定文件编码或文本流编码并直接输出

主要原理利用JCharDet猜测文本流 
JCharDet 是mozilla自动字符集探测算法代码的java移植,其官方主页为:http://jchardet.sourceforge.net/

网上找到的教程都是只探测编码,而一般的需求都是找到编码后,利用编码信息,把文本流或者文本再读取出来,可是问题来了,在探测编码后,JCharDet会读取一部分文本流了,不能再回过头去读文本了。可能的办法是再重新读取一次文件,或者再原来的其他操作得到一个新的InputStream,不过这样做总觉得不舒服。
其实可以利用BufferedInputStream的mark()和reset()方法(BufferedInputStream支持此操作):
mark用于标记当前位置;在读取一定数量的数据(小于readlimit的数据)后使用reset可以回到mark标记的位置。

测试代码如下:
public class Test {
public static void main(String[] args) throws Exception {
File file = new File("F:\\test.lrc");
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
CharsetDetector charDect = new CharsetDetector();
String encode = charDect.detectChineseCharset(in, 5120);
System.out.println("侦测到的编码: " + encode);
BufferedReader reader = new BufferedReader(new InputStreamReader(in,
encode));
while (true) {
String line = reader.readLine();
if (line == null)
break;
System.out.println(line);
}
reader.close();
in.close();
}
}

CharsetDetector类的代码如下(附带注释):
public class CharsetDetector {

private boolean found = false;
private String result;
private int lang;

/**
* @param imp
*            文本流需要封装成BufferedInputStream
* @param readlimit
*            探测的时候,最多用到多少,读到这个limit的时候就reset回去,供以后文本读取的方法读取,
*            一般测试下来5120应该就能检测出编码了,再多可能对性能有影响,
*            如果readlimit为负数,说明只要检测编码,不需要为BufferedInputStream mark,
*            不用文本读取,直接关闭流就可以了
* @param defaultCharset
*            默认的编码
*/
public String detectChineseCharset(BufferedInputStream imp, int readlimit,
String defaultCharset) throws IOException {
if (defaultCharset == null)
defaultCharset = "UTF-8";
if (readlimit > 0)
imp.mark(readlimit);
lang = nsPSMDetector.CHINESE;
// Initalize the nsDetector() ;
nsDetector det = new nsDetector(lang);
// Set an observer...
// The Notify() will be called when a matching charset is found.

det.Init(new nsICharsetDetectionObserver() {

public void Notify(String charset) {
found = true;
result = charset;
}
});
byte[] buf = new byte[1024];
int readRemain = readlimit;
boolean isAscii = true;
while (true) {
int bufLength = 1024;
if (readRemain > 0 && readRemain < bufLength)
bufLength = readRemain;
int len = imp.read(buf, 0, bufLength);
if (len == -1)
break;
readRemain -= len;
if (readRemain <= 0)
break;
// Check if the stream is only ascii.
if (isAscii)
isAscii = det.isAscii(buf, len);
// DoIt if non-ascii and not done yet.
if (!isAscii) {
if (det.DoIt(buf, len, false))
break;
}
}
if (readlimit > 0)
imp.reset();
else
imp.close();
det.DataEnd();
if (isAscii) {
found = true;
return defaultCharset;
} else if (found) {
return result;
} else {
String[] pc = det.getProbableCharsets();
if (pc == null || pc.length == 0)
return defaultCharset;
else
return pc[0];
}
}
}

2011年1月27日星期四

小谷音乐gcnplayer1.5赶在春节前发布

春节前的最后一次更新,更新日志
V1.5更新
1 增加播放列表和在线音乐的专辑图片显示
2 新增是否显示专辑图片设置,如果开启后拖动卡,可选择关闭
3 优化了通知栏
4 其他细节调整
V1.5修正
1 修正了暂停歌曲会将歌词滚动到最顶上的BUG
2 修正没有歌词时点歌词部位无法触发暂停功能


更新程序下载