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 修正没有歌词时点歌词部位无法触发暂停功能


更新程序下载






2011年1月18日星期二

小谷音乐gcnplayer1.4发布,启用全新界面,增加桌面插件,优化代码,压缩体积

V1.4更新
1 启用全新界面
2 增加桌面小部件,可方便控制播放
3 优化了歌词滚动效果
4 丰富了歌词库
5 增加了歌词偏移选项,针对单个歌曲开始是否显示歌词选项
6 在线歌曲播放时增加缓冲百分比提示
7 进一步优化代码,压缩体积
8 其他细节调整

V1.4修正
1 修正了有时退出程序后,手机不会进入休眠
2 修正了暂停状态下拖动进度条歌词不跟随显示的BUG
3 修正Android1.6下Tab字体看不清的问题
4 修正默认不自动播放没有生效的问题
5 修正了首页歌曲排行显示20首歌后无法加载更多的BUG

更新程序下载(仅300KB):
http://www.hiapk.com/thread-872443-1-1.html

2011年1月5日星期三

小谷音乐播放器gcnplayerV1.3发布

时隔一周,Android上的小谷音乐又更新到1.3版本啦!此次更新内容如下
V1.3更新
1 修改了界面布局和色调
2 更新了歌词展现形式(歌词滚动播放)
3 完善自动更新,能下载更新并自动安装
4 增加了自动播放时,阻止自动休眠的选项
5 其他细节调整

V1.3修正
1 在线音乐进入列表之后返回没有记住上一层的位置

HiAPK论坛发布地址:http://www.hiapk.com/bbs/viewthread.php?tid=820414
APK安装文件下载地址:http://2ml1sq.bay.livefilestore.com/y1pewjr0wMtkzadvju8Qt4kgDr3P2d96ifTmO4rF2yKzg-btzvcQtLhLofjaSY0GFelh_d1iKXkpgl-e0S_DALlnwAiTAmiq-_w/gcnplayerV1.3.apk?download&psid=1
1.2版本的用户也可用过“自动更新”来升级程序

上图:

flashlight Android上的闪光灯手电筒程序发布(需要ROOT权限)

手电筒程序貌似很多ROM都自带的,我为什么还要自己写一个,主要是最近很多论坛除了Android2.3的版本,不免心痒痒要刷一下,结果手电筒没了,考虑到手电筒平时还是很常用的,网上搜了半天也没有找到一个简单好用的,要么不是闪光灯作为灯源的,要么就是不能用,就自己写了一个,反正也没有花很多时间,山寨了一个HTC Sense自带的那种。如果正好有网友遇到和我一样的问题,这个flashlight程序就拿去用用,不过需要手机是ROOT权限的。

下载地址:
https://market.android.com/details?id=com.terrynow.flashlight
有图有真相:

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

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