春暖花开

2014就这么偷偷摸摸的来了,一大早就摔了俩跟头,也许就是把2014年的厄运都这么过去了吧。

外面现在阳光灿烂,虽然还算是冬天,还是向往春暖花开的时候。按照往年的惯例,开始整理打扫卫生,该洗的洗,该晒的晒。

2013年的好的也好,坏的也好,都这么过去吧,希望2014是个新的开始。

忘れられないひととことが色々ですけど、終わっちゃった。感謝すると謝罪する機会がありませんが、申し訳ございませんでした。

http://m6.file.xiami.com/21/2021/161000846/1771690321_4283785_h.mp3

歌名:春暖花开

作词:梁芒
作曲:洪兵
演唱:那英

春暖花开歌词:

如果你渴求一滴水
我愿意倾其一片海
如果你要摘一片红叶
我给你整个枫林和云彩
如果你要一个微笑
我敞开火热的胸怀
如果你需要有人同行
我陪你走到未来
春暖花开
这是我的世界
每次怒放
都是心中喷发的爱
风儿吹来
是我和天空的对白
其实幸福
一直与我们同在

如果你要一个微笑
我敞开火热的胸怀
如果你需要有人同行
我陪你走到未来
春暖花开
这是我的世界
每次怒放
都是心中喷发的爱
风儿吹来
是我和天空的对白
其实幸福
一直与我们同在

春暖花开
这是我的世界
生命如水
有时平静 有时澎湃
穿越阴霾
阳光洒满你窗台
其实幸福
一直与我们同在
我的世界

mpg123的循环播放

MPG123,听音乐最好能使用一个表(文件)把要播放的歌曲目录存在表里面:view plaincopy to clipboardprint?
find . -name “*.mp3” | sed ‘s/\.\///’ | sort > list.lst
find . -name “*.mp3” | sed ‘s/\.\///’ | sort > list.lst  播放的时候就可以:view plaincopy to clipboardprint?
mpg123 –list list.lst
mpg123 –list list.lst如果要循环的话可以加入–loop选项:view plaincopy to clipboardprint?
mpg123 –loop -1  songname.mp3
//-1(<0)的数表示无限循环,也可以指定确定的次数。只能是单首循环。
//这个–loop 参数如果用来播放List(文件)中的歌曲时
//是不能够达到重头到尾的重复播放的效果的,只是循环第一首。

//如果要循环目录内容的话,目前可以:
mpg123 –list list.lst -Z
//用于随机循环播放
mpg123 –loop -1  songname.mp3
//-1(<0)的数表示无限循环,也可以指定确定的次数。只能是单首循环。
//这个–loop 参数如果用来播放List(文件)中的歌曲时
//是不能够达到重头到尾的重复播放的效果的,只是循环第一首。//如果要循环目录内容的话,目前可以:
mpg123 –list list.lst -Z
//用于随机循环播放

ffmpeg笔记

 

ffmpeg version N-43921-ga366bea 版本 视频转换参数详解

(转自http://www.cppblog.com/nenlong/archive/2012/09/18/191047.html)

libavutil 51. 70.100
libavcodec 54. 54.100
libavformat 54. 25.104
libavdevice 54. 2.100
libavfilter 3. 13.101
libswscale 2. 1.101
libswresample 0. 15.100
libpostproc 52. 0.100

rem -c:v libx264 视频解码器
rem libvpx copy libxvid mpeg4 mpeg2video rawvideo
rem -b:v 2000k 视频比特率 x264固定解码率是正确 其他的都不正确
rem -c:a libmp3lame 音频解码器
rem -b:a 128k 音频比特率

rem -q:v 1 固定视频量化标度(VBR) 0.1-31 1高 31最差 这时-b:v无效 以前是 -qscale n格式
rem mpeg4时 0.1=4335k 1=3835k 2=3403k 3=2186k 4=1678k 5=1336k 6=1158k 7=1003k 31=286k
rem -qmin 1 最小视频量化标度(VBR)
rem -qmax 1 最大视频量化标度(VBR)
rem -qcomp 1.0 视频量化标度压缩(VBR) 0.0-1.0

rem -sameq 同样视频质量 此时 -b:v -qscale 无效

rem -ss 00:20:00.000 转换开始时间 不能在 -i 后面
rem -t 00:01:10.000 转换总时间
rem -vframes 600 转换振幅总数
rem -s 720×404 转换分辨路
rem -aspect 16:9 设置横纵比
rem -g gop_size 设置图像组大小
rem -bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
rem -qcomp compression 视频量化标度压缩(VBR)
rem -dc 设置dct的算法
rem -mbd 2 宏块决策算法(高质量模式) 0=mbcmp (default) 1=fewest bits 2=best rate distortion
rem 转换某时间段
rem ffmpeg -y -ss 00:20:00.000 -i in_xxx.wmv -t 00:00:03.000 -c:a libmp3lame -b:a 128k -c:v mpeg4 -sameq -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 -aspect 16:9 -f avi -s 720×404 out_xxx.avi

rem 全部转换
rem ffmpeg -y -i in_xxx.wmv -c:a libmp3lame -b:a 128k -c:v mpeg4 -sameq -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 -aspect 16:9 -f avi -s 720×404 out_xxx.avi

视频合并
mencoder 001 002 003 -oac copy -ovc copy -o jion.avi

获取摄像头
ffmpeg -y -f vfwcap -i 0 -c:v mpeg4 -q:v 1 -qmin 1 -s 640×480 -r 24 -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 -aspect 4:3 -f avi cap.avi

上传照片并自动旋转

项目中有个需求,需要通过手机浏览器上传照片。本来是个很简单的事情,后来发现手机自带的陀螺仪会根据手机的方向变化而发生旋转,导致上传的照片容易发生偏转。后来查了一些资料,在图片的EXIF信息中包含了照片的方向。

下载了metadata-extractor类,用来解析照片中的exif信息。

通过下面的方法得到方向:

public static int getImageOrientationTag(File f){
Metadata metadata;
try {
metadata = JpegMetadataReader
.readMetadata(f);
Directory exifDirectory = metadata.getDirectory(ExifDirectory.class);

if(exifDirectory.containsTag(ExifDirectory.TAG_ORIENTATION)){
return exifDirectory.getInt(ExifDirectory.TAG_ORIENTATION);

}

} catch (JpegProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MetadataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1;
}

下面的方法来旋转照片:

public static void autoRotateImageByExif(String srcFile,String desFile){

try {
File in = new File(srcFile); // 读入文件
BufferedImage src = javax.imageio.ImageIO.read(in);
int orientation = getImageOrientationTag(in);
switch (orientation) {
case 1:
case -1:   //不需要旋转
FileUtil.copyFile(srcFile, desFile);
break;
case 8: //旋转270度
rotateImg(src, 270, Color.BLACK, desFile);
break;
case 3: //旋转180度
rotateImg(src, 180, Color.BLACK, desFile);
break;
case 6: //旋转90度
rotateImg(src, 90, Color.BLACK, desFile);
break;
default:
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 构造Image对象

}

根据exif权威解释,总共有8种方向,另外四种除了旋转以外,还有镜像,根据手头的测试,没有发生镜像问题,所以就把它忽略掉了。

虾米网音乐下载

为了下载虾米的音乐,网上找了不少帖子,自己写程序来解密地址加密。解密以后发现操作还是太复杂,干脆用了这个懒办法。
1.先找到音乐id
比如打开音乐的链接如下:
http://www.xiami.com/song/play?ids=/song/playlist/id/3297547/object_name/default/object_id/0

id就是3297547

2.拼下面的地址
http://www.xiami.com/app/iphone/song/id/3297547

把后面的数字换成前面的id

3.打开改地址
内容大概如下:
{“song_id”:”3297547″,”default_resource_id”:”164782″,”length”:”237″,”category”:null,”listen_file”:”\/aliyunos\/62\/7062\/297623\/3297547_164782_l.mp3″,”album_id”:”297623″,”name”:”\u306a\u3054\u308a\u96ea “,”artist_name”:”\u590f\u5ddd\u308a\u307f”,”artist_id”:”7062″,”title_url”:”yi”,”recommends”:”50″,”singers”:”\u590f\u5ddd\u308a\u307f”,”title”:”\u6b4c\u3055\u304c\u3057~\u30ea\u30af\u30a8\u30b9\u30c8\u30ab\u30d0\u30fc\u30a2\u30eb\u30d0\u30e0~ “,”album_logo”:”http:\/\/img.xiami.com\/images\/album\/img62\/7062\/297623_2.jpg”,”location”:”http:\/\/m1.file.xiami.com\/62\/7062\/297623\/3297547_164782_l.mp3″,”low_size”:”9489600″,”file_size”:null,”low_hash”:”d633a228ae032c0b0223618f367b2fbb”,”whole_hash”:”d633a228ae032c0b0223618f367b2fbb”,”content_hash”:”d633a228ae032c0b0223618f367b2fbb”,”content_size”:”9489600″,”lock_lrc”:”2″,”lyric”:”http:\/\/img.xiami.com\/lyric\/upload\/47\/3297547_1252216310.lrc”,”year_play”:”6694″,”grade”:”-1″,”album_url”:”http:\/\/www.xiami.com\/app\/iphone\/albuminfo?id=297623&uid=”,”artist_url”:”http:\/\/www.xiami.com\/app\/iphone\/artistinfo?id=7062&uid=”,”isad”:”0″}

其中的location是没有加密的地址:
http:\/\/m1.file.xiami.com\/62\/7062\/297623\/3297547_164782_l.mp3

然后把”\”全部去掉就是完整的mp3地址了,想下载或者在线播放都可以了。

なごり雪

一首被N多人翻唱的歌曲

1974年 かぐや姫 『三階建の詩』
1975年 吉田拓郎・かぐや姫 コンサート インつま恋
1975年 イルカ カバーバージョンがシングル
1976年 清水由貴子 (オーディション番組『スター誕生!』(NTV系)の第16回決戦大会で歌唱)
1978年 ビューティ・ペア(アルバム『〈スター・マイ・セレクション・シリーズ〉ビューティ・ペア』に収録)
1982年 松尾久美子 (『スター誕生!』の第42回決戦大会で歌唱)
1990年 福山雅治 (日本ビクターのビデオカメラ「ムービーごっこ」のCM曲としてカバー。未CD化)
1992年 Mi-Ke (アルバム『忘れじのフォーク・白い2白いサンゴ礁』に収録)
1994年 永井みゆき(アルバム『全曲集’95~応援歌でヨイショ』に収録)
1998年 鈴木真仁 (アルバム『いちご白書をもう一度』に収録)
1999年 LIFE RECODERS (アルバム『東京の空』に収録)
1999年 結城比呂 (アルバム『時の断層』に収録)
2000年 岡村靖幸 (シングル『真夜中のサイクリング』に収録)
2001年 七緒香 (アルバム『はじまりのうた』に収録)
2001年 市井紗耶香 (アルバム『FOLK SONGS』に収録)
2003年 ビリケン (「nagoriyuki」としてカバー)
2003年 JINDOU (シングル『なごり雪』に収録)
2004年 松浦亜弥 (アルバム『FS5〜卒業〜』に収録)
2004年 ketchup mania (アルバム『GAL盤』『THE BEST OF ketchup mania』に収録)
2005年 高橋直純 (アルバム『scene〜残したい風景〜』に収録)
2005年 平原綾香 (アルバム『From To』に収録)
2005年 石川ひとみ (アルバム『With みんなの一五一会〜フォークソング編』に収録)
2006年 徳永英明 (アルバム『VOCALIST 2』に収録)
2006年 ムック (限定配布アルバム『COVER PARADE』に収録)
2006年 神園さやか (アルバム『二十歳の原点』に収録)
2006年 嘉門達夫 (替え歌『なごり寿司』としてアルバム『笑撃王』に収録)
2007年 Kat McDowell (「ナゴリユキ」としてミニアルバム『kat』等に収録)
2007年 リュ・シウォン (シングル『花の首飾り』に収録)
2007年 夏川りみ (配信限定アルバム『歌さがし 〜リクエストカバーアルバム〜』に収録)
2008年 中孝介 (シングル『春』に収録)
2008年 ameji(アルバム『LOVE STORIES』に収録)
2008年 鬼束ちひろ (ライブDVD『NINE DIRTS AND SNOW WHITE FLICKERS』に収録)
2009年 坂本冬美 (アルバム『Love Songs 〜また君に恋してる〜』に収録)
2009年 Scott Murphy (アルバム『GUILTY PLEASURES LOVE』に収録)
2009年 ダンカン・レッドモンズ (アルバム『Up And At ‘Em』に収録)
2009年 中西保志 (アルバム『メロディーズ』に収録)
2009年 中森明菜 (アルバム『フォーク・ソング2 〜歌姫哀翔歌』に収録)
2010年 元ちとせ&秦基博(養命酒製造「ハーブの恵み」TVCMソング)
2012年 河村隆一(カヴァーアルバム『The Voice 2』に収録)
2013年 有安杏果(ももいろクローバーZ)with南こうせつ (アルバム『5TH DIMENSION』初回限定盤Aに収録)

听了好几个版本,貌似夏川里美的反而先入为主了。那就先推荐她的吧。

なごり雪

夏川りみ

なごり雪
作詞:伊勢正三
作曲:伊勢正三

汽車を待つ君の横で
ぼくは時計を気にしてる
季節はずれの雪が降ってる
「東京で見る雪はこれが最後ね」と
さみしそうに 君がつぶやく
なごり雪も 降る時を知り
ふざけすぎた 季節のあとで
今 春が来て 君はきれいになった
去年よりずっと きれいになった

動き始めた
汽車の窓に 顔をつけて

君は何か 言おうとしている
君の口びるが
「さようなら」と動くことが
こわくて 下を向いてた
時が行けば 幼い君も
大人になると 気づかないまま
今 春が来て 君はきれいになった
去年よりずっと きれいになった

君が去った ホームに残り
落ちてはとける 雪を見ていた
今 春が来て 君はきれいになった
去年よりずっと きれいになった

下面是イルカ的版本, 35年前的版本

vmware无法在ubuntu上安装

在ubuntu server上安装vmware总出错,google以后,运行以下命令解决

sudo apt-get install build-essential

sudo apt-get install linux-headers-$(uname -r)

 

Ubuntu 13.04是最新的3.0的Linux内核,其内核版本的头文件的位置发生了变化,

导致之前,相对旧的VMWare Tools,找不到对应的头文件,因此而报错。

解决办法:

用当前,实际上已经存在的头文件,做个软链接:

 

sudo ln -s /usr/src/linux-headers-$(uname -r)/include/generated/uapi/linux/version.h /usr/src/linux-headers-$(uname -r)/include/linux/version.h

 

就可以重新运行vmware安装程序了。

涙そうそう

最开始接触到的是《涙そうそう》这首歌,在收音里面听到这首歌。不知道名字,而且日语听力实在不怎么样,只能听到几个なだそうそう之类的音节。后来在网上搜了很久,才知道是夏川里美的《涙そうそう》,中文名字是《泪光闪闪》,因为带冲绳的发音,涙(なみだ)发音却是なだ。

这首歌流行于冲绳地区,似乎还有个硫球语版本,是写给过逝的亲人的歌曲,被夏川里美翻唱后,一炮走红,不仅红遍东夷,台湾大陆也是红极一时。

[swf]http://www.xiami.com/widget/0_3296711/singlePlayer.swf[/swf]

夏川里美天籁的声音感觉不带一点杂音,能够让我整个下午一直循环的听。

歌曲由翻看老照片开始,所有往事和思念一一展现出来。

古いアルバムめくり
ありがとうってぶやいた
いつもいつも胸の中
励ましてくれる人よ
晴れ渡る日も 雨の日も
浮かぶあの笑顔
思い出遠くあせても
おもかげ 探して
よみがえるのひは 涙そうそう

一番星に祈る
それが私のくせになり
夕暮れに見上げる空
心いっぱいあなた探す
悲しみにも 喜びにも
おもうあの笑顔
あなたの場所から私が
見えたら きっといつか
会えると信じ 生きてゆく
晴れ渡る日も 雨の日も
浮かぶあの笑顔
思い出遠くあせても
さみしくて 恋しくて
君への想い 涙そうそう
会いたくて 会いたくて
君の想い 涙そうそう

这首歌听过若干年后,听说还有一部同名的电影,找到以后,是一部很清爽的兄妹恋的片子。男主角母亲改嫁,继父带着一个小女孩,父亲离家出走,母亲临终托付男主角照顾小女孩。小男孩牺牲自己前途来兑现自己的承诺,给妹妹幸福。兄妹之间因为爱了不能不分,当男主角因劳累过度得心肌炎死去,妹妹的那声nini。妹妹送哥哥的骨灰回老家,收到了哥哥寄来的礼物,一件和服和道歉的信。当妹妹重新翻开哥哥留下的他们的回忆的照片时,这首歌声响起。

fbf5bc12c8fcc3ce193dccf79245d688d63f205e

硫球语版,听不懂,但是还是能听出其中的哀愁。

http://www.xiami.com/widget/0_3297380/singlePlayer.swf

唄:夏川りみ作詞者:森山良子/ウチナーグチ
作曲者:BEGIN
なちかしアルバムみくてぃ かふうしどーんでぃくとぅばかき
いちんいちまでぃんちむぬ内 くくるかきゅるあぬひとぅゆ
晴りわたる日ん あみぬ日ん 浮かぶあぬちゅらさ
なちかさやとぅーく うむよーなてぃん
うむかじとぅみてぃ かじ立ちゅる日や 涙そうそう

一番ぶしににがゆんくりが我めなれーなてぃ
ゆまんぎめすら見上ぎてぃちむふくらまち うんじゅとうゆゆん
なちかさてぃんるくらしゃてぃんうむいやあぬちゅらさ
うんじゅめはすかられしがた

みらりりば かなじいちか あゆるんでぃ信じいきてぃんか
晴りわたる日ん あみぬ日ん 浮かぶあぬちゅらさ
なちかさやとぅーく うむよーなてぃん
さびしさぬ くいしさぬ うむいや増さてぃ 涙そうそう

尘埃落定

昨天终于把户口搞定了,等一个月后拿新的身份证。

10年毕业回来,断断续续一直都在为户口奔波,先是办学历认证,然后交各种材料办理户口,一次一次地跑人才市场,一次一次地补材料。难怪之前在网上看公略说办户口要做好持久战的准备,迎接你的是白眼和等待,漫长的等待,毫无希望的等待。从HR邮件那里知道批复下来的时候,心里已经没有任何兴奋感,已经是平淡得不能平淡。后面就是按照流程一步一步准备材料,然后到派出所拿户籍证明。

一个户口花了2年多时间。同样是中国人,同样缴税交保险,一个户口就把所有的权利分离开来,这也许就是所谓的中国特色吧。

通过google voice发送短信

手机上一直装了几个应用,用来给美国手机发送短信,每次都需要登录,比较麻烦。最近也想做一个小应用,其中通过手机发送验证码,觉得google voice最能满足这个要求,反正免费的不用白不用。

在网上找了一些源码,看看如何通过程序来发送短信,基本由三个版本,两个php版,其中一个zend加密版本,被pass掉,另外一个可能接口有些变更,好像发送不太成功。另外还找到一个java版本,测试了一下,可以成功发送,感谢原作者xinghuo.yao的无私奉献。从google code下载的代码,貌似作者是做了一个smsbot,但是我不需要这么复杂的功能,只把googlevoice实现部分摘出来了。

public class GoogleVoice implements Serializable {

/**
*
*/
private static final long serialVersionUID = 5889296580959689523L;
private String email;
private String password;

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

private String auth;
private String rnr;

private long lastSessionTime = 0;

public long getLastSessionTime() {
return lastSessionTime;
}

public void setLastSessionTime(long lastSessionTime) {
this.lastSessionTime = lastSessionTime;
}

public GoogleVoice(String email, String password)
throws AuthenticationException {
this.email = email;
this.password = password;
signIn();
}

private void signIn() throws AuthenticationException {
retrieveLoginAuth();
retrieveRnr();
lastSessionTime = System.currentTimeMillis();
}

public boolean sendSms(String mobile, String message) {
if (!checkSession())
return false;
try {
String payload = “id=&phoneNumber=” + mobile + “&text=”
+ URLEncoder.encode(message, “UTF-8”) + “&_rnr_se=”
+ URLEncoder.encode(rnr, “UTF-8”);
String data = fetchData(“https://www.google.com/voice/sms/send/”,
payload, auth);
// Should return {“ok”:true,”data”:{“code”:0}}
if (data.contains(“:true”))
return true;
else
return false;
} catch (Exception e) {
return false;
}
}

private boolean checkSession() {
if (System.currentTimeMillis() – lastSessionTime >= 1800000l)
return false;
lastSessionTime = System.currentTimeMillis();
return true;
}

private void retrieveLoginAuth() throws AuthenticationException {
String payload = “accountType=GOOGLE&Email=” + email + “&Passwd=”
+ password + “&service=grandcentral&source=” + “GAE”
+ “-GoogleVoiceTool”;
try {
String data = fetchData(
“https://www.google.com/accounts/ClientLogin”, payload,
null);
int index = data.indexOf(“Auth=”);
if (index != -1 && index + 5 < data.length())
auth = data.substring(data.indexOf(“Auth=”) + 5).trim();
if (StringUtil.isEmptyOrWhitespace(auth))
throw new AuthenticationException(“Get Login Auth failed”);
} catch (Exception e) {
throw new AuthenticationException(e.getMessage());
}
}

private void retrieveRnr() throws AuthenticationException {
try {
String data = fetchData(“https://www.google.com/voice/m/”, null,
auth);
Pattern p = Pattern.compile(
“<input.*?name=\”_rnr_se\”.*?value=\”(.*?)\””,
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(data);

if (m.find())
rnr = m.group(1);
if (StringUtil.isEmptyOrWhitespace(rnr))
throw new AuthenticationException(“Get rnrSEE failed”);
} catch (Exception e) {
throw new AuthenticationException(e.getMessage());
}
}

private String fetchData(String url, String payload, String auth)
throws Exception {
HttpURLConnection con = (HttpURLConnection) new URL(url)
.openConnection();
if (auth != null)
con.setRequestProperty(“Authorization”, “GoogleLogin auth=” + auth);
con
.setRequestProperty(
“User-Agent”,
“Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20”);
con.setRequestProperty(“Content-Type”,
“application/x-www-form-urlencoded”);
if (payload == null)
con.setRequestMethod(“GET”);
else {
con.setDoOutput(true);
con.setRequestMethod(“POST”);
OutputStream os = con.getOutputStream(); // 输出流,写数据
os.write(payload.getBytes(“UTF-8”));
os.flush();
os.close();
}
int code = con.getResponseCode();
if (code == 200) {
String response = getContent(con.getInputStream(), code);
con.disconnect();
return response;
} else {
String response = getContent(con.getErrorStream(), code);
con.disconnect();
throw new AuthenticationException(response);
}
}

private String getContent(InputStream in, int code) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(in,
“UTF-8”)); // 读取结果
StringBuffer sb = new StringBuffer(“”);
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append(“\r\n”);
if (code != 200 && line.startsWith(“Error=”)) {
reader.close();
return line.substring(6);
}
}
reader.close();
if (code != 200)
return String.valueOf(code);
return sb.toString();
}

public static void main(String[] args) throws AuthenticationException{
GoogleVoice gv = new GoogleVoice(“用户名”, “密码”);
if (gv.sendSms(“手机号码”, “hello”))
System.out.println(“短信已发送至:”);
else
System.out.println(“短信未发送”);
}
}

 

 

早在一两年前,gv貌似还能全世界发短信,后来只限定在美加,不过对于我来说这个已经足够了。再次感谢作者无私奉献,感谢google无私奉献,但愿google别把这个接口给封了。

Dana’s Travel in China

IMG_4739 IMG_4744   IMG_4746IMG_4644 IMG_4647 IMG_4668 IMG_4673 IMG_4729

IMG_4806

Dana, one of my america friends, came to China and traveled in several cities. In every cities, he got great passion from the students. He is a religious Christian.

One of my classmates asked him, why you come to China. He said, everyone is like a mirror, which can reflect the light of God. We could help others just like the mirror reflecting the light.

He does help the students a lot in Springfield, He spends 25 hours to help the student, even 35 hours a week, that is to say, 5 hours per day.  That why he can receive the great passion here. I don’t think if other professor who also comes from Springfield can receive better than him.

Common people, but great man.

Since I am not a Christian, but I want to thank him.

wordpress首页只显示指定栏目

这个blog建了挺久了,一直是乱七八糟的帖子混在一起,首页比较混乱,所以想把首页只放一些原创的非技术的帖子。

在网上找了很多方法,有的需要修改源代码,有的装插件。修改源代码的方法不适合将来升级(虽然说上次升级导致博客无法打开),所以还是用插件比较好。

网上推荐用Front Page Excluded Categories装了这个插件似乎不生效。所以又装了Ultimate Category Excluder,装上并启用以后在setting里面Category Exclusion里面选上你要过滤掉的目录就可以了。这个插件的神奇之处在于,你可以选择只滤掉首页,feed,search等不过滤,这样既可以隐藏首页不想要的东西,又不影响搜索引擎及订阅的内容。赞一个。

在树莓派上使用RS232(连接到Psion5)

原文地址:http://blog.mrpjevans.com/2012/1 … ry-pi-to-a-psion-5/

(笔者注:Psion5是Psion公司出的一款掌上电脑)

树莓派的通用输入输出口(GPIO)由26针组成,是黑客们的最爱,能够使用模拟或者数字信号的操作。翻遍了手册,我发现居然连基本的串口都没有。也就是我们上个世纪的老朋友,RS232,这是一个低功耗版本。对于那些完全不知道我说什么的人,不用担心,即使这个帖子不太适合你。RS232看起来像是以前那些学校废弃的技术,但实际上它是我们身边最简单的两机通讯的方式。

庆幸的是,搞Pi的那些聪明的家伙,使用串口作为控制台,也就是说,你可以用它登录然后得到一个命令行。我白天的工作就是在一个数据中心管理一堆的服务器。尽管他们有很多最新的、功能强大的工具包,无一例外的是他们都配有串口。当显卡不能正常工作时,至少你还可以通过这个接口来登录系统。

Pi上提供的串口使用起来很简单。只需要4条线:电源,发送,接收,地。没有更简单的方法了,直接把这些线连接到电脑的COM口,对不对?

嗯,不对。这其中有一个问题,Pi用的电压是3.3v,RS232需要+12V作为高电平(1),-12v作为低电平(0)。Pi自身没办法做到,通过google可以找到很多现成的解决方案。幸运的是,有一个现成的芯片可以双向转换信号,让我们可以从pi的低电压信号转换成一个“真正的”RS232接口。这个价格大概是5镑,名字叫MAX3232CPE。只需要小部分的电容就可以。

到了我们开始干活的时候了。我从本地的Maplin买到了所有的配件(下面提供了链接和编号):
一个Max2323CPE集成电路(DT26D)
一个16针DIL IC插座(BL19V)(如果你有面包板,这个就不需要了)
5个0.1uF电容(N43CJ)
9针D-Type插座
线
杜邦线(A39GF)
一些洞洞板(FL17T)(虽然我强烈建议一开始用面包板)

当然还有:
一点焊接经验
一个COM/串口

我这里还出现了一个问题。作为Mac用户,我知道乔布斯多年前就放弃了RS232口,采用兼容性很好的usb接口。幸好Maplin还卖一个基于PL2303芯片usb转串口的适配器,在OS X上运行的很好,包括山狮,但是我花了不少时间来找驱动和步骤。

开始干活,这就是我们要做的:


最开始我在面包板上完成了,按照Joonas Pihlajamaa的步骤(链接在文末)。如果你还是个新手,在面包板上插IC芯片,还是要小心一些,把所有的针脚都插进去。在这个时候不需要用插座。下一步,我焊接了一个9针的连接器。我把RXD焊到针脚2,TXD焊到针脚3,地为针脚5(右上)。

现在你关闭Pi,从集成电路的1,6,8,10针脚连接这4条线到Pi。针脚1时左上,标记为P1。在它右边是针脚2。然后针脚1下是3,右边是4,以此类推。

这四条线是这么连接的:
Pin 1 – +3.3V
Pin 6 – Ground
Pin 8 – TXD (发送数据)
Pin 10 – RXD (接收数据)

将9芯的RS232连接到你的COM接口,然后打开Pi。
你的Pi应该正常启动,根本不知道建了新连接。现在把你的注意力放到你的电脑。

你需要有个软件能够连接到你的Pi。在windows上,你可以用PuTTY。在mac上,试试看MacWise,或者直接用linux上的命令行工具,比如screen

如果你打算用screen,来看看他是和么安装的

  1. $ screen -h

复制代码

命令不存在?那就安装吧

  1. $ apt-get install screen</p><p>$ screen /dev/ttyUSB0 115200

复制代码

或者你已经安装了MacPorts

  1. $ port install screen</p><p>$ screen /dev/tty.usbserial 115200

复制代码

注意:在/dev/可能有很多设备,取决于操作系统和驱动程序等。看看你的/dev/目录下是不是存在。可以找tty或者usb开头的那些。

屏幕应该会变成空白,按一次回车键后会出现登陆提示,然后可以到Pi的配置。

如果你用一个更高级的包,记住RS232工作前还需要配置。Pi的设置是115200bps(波特率),8位,无校验,一个停止符。这个通常标记为115200 8N1,你需要改成这个设置。一旦配置好,打开或者连接(取决于你软件怎么用)然后按回车就可以了。Pi的登录提示应该就会出来了。

无法运行?十之八九是你PC端的的RXD和TXD没接对。断开连接关闭Pi,在面包板上把这两条线换一下。如果这样还不工作,检查你终端的设置。

我决定通过给Pi届一个屏幕和键盘让它得到一个合乎逻辑的结论(在我的脑子里),也就是Psion5。然后一开始无法正常工作,因为不管是Psion还是Pi都希望自己是可以和电脑通信的“客户端”。我需要一个交叉线,把RXD和TXD交换一下,最后可以跑了。


只要在面包板上可以运行了,就很容易把IC移植到洞洞板,让它做一些持久地工作。

你可能奇怪为什么要这么做,事实是很多设备依旧在使用RS232通信。你可以在投影机、机顶盒甚至车上找到RS232接口。即使我一个很老的洗衣机上也有一个。所以,让Pi拥有一个很好用的RS232接口将会很有意思。通过google你还可以将目前登录命令行改成你想要的。我将会怎么用它?它将会是另外一个贴子。

Sources for this article:
Joonas Pihlajamaa
http://codeandlife.com/2012/07/01/raspberry-pi-serial-console-with-max3232cpe/

speakjava
https://blogs.oracle.com/speakjava/entry/serial_communications_with_a_raspberry

永远有多远[转]

永远有多远
永远有多远?
是一个永恒,还是瞬间?
永远?可不可以告诉我,永远有多远?
永远到底有多远?
有时候永远也就是生和死的距离。
因为你给我说过,要好好的活。也许在你的心里,好好的活着,就是永远了。

 

永远是花开花谢 还是潮起潮落?
永远是日生日落 还是人来人往 ?
或是…..或许永远就是当你紧紧将我拥抱的那一瞬间
而当我决定放开你那双苍白的双手 望着你孤独落寞的背影
永远也变成了一只短翅的蝴蝶….!
恍然间我明白了 当你离开我的时候 永远也成了一只断翅的蝴蝶!

 

“永远有多远”,我无法回答,久久,竟然泪湿了脸庞。

心,就象过去一样狠痛起来。永远有多远啊?
也许这也是我一直想问的问题,只是因为知道没有答案,就甚至问都不敢问。

 

永远到底有多远?
不止一次 你这样的问我
我不敢给你轻言任何承诺
因为承诺对我们来说太沉重
因为我知道我们没有未来
教堂的那头并不是我们的最终
从相识的那天起 就早注定了
我们两个只是两条平行的直线
我不敢轻言永远 当你望着我的时候
我唯有保持沉默

 

要爱一个人到永远,伤心到永远,那种锥心的疼到永远,
这永远,到底有多远?是不是真的要用一生去爱一个人的同时,
也要用这一生去忘记同一个人?直到生命的尽头……

谁又知道,承诺的永远有多远,心疼的永远又有多远?爱又有多远?
落叶归根,可在这样一个起风的日子里,
叶子会飘落何处?何处才是它的终点?
风啊,不要吹的太猛了,让叶子归根吧!
云啊,不要走的太快了,叶子跟不上你的步伐。
时不时的,天空又飘起了雪,
是在告诉叶子这个时节有多冷吗?
叶子停不下来了,风不停的在吹,云不断的在走,
雪花都已经漫天飞舞了,
叶子好冷、好累……
永远到底有多远,
叶子有永远吗?叶子的永远又在哪里?