尘埃落定

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

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

永远有多远[转]

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

 

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

 

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

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

 

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

 

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

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

時の流れに乗って 走ったことも 振り返れば すべてが 同じに見える

video: http://www.yinyuetai.com/video/77479

歌词转自http://music.douban.com/review/5070085/

「東京の空」/东京的天空
作詞∶小田和正
作曲∶小田和正
歌∶小田和正

自分の生き方で 自分を生きて
多くの間違いを 繰り返してきた
用自己的生存方式,独自生存下去
有很多错误循环往复

時の流れに乗って 走ったことも
振り返れば すべてが 同じに見える
纵然时光流逝、岁月奔走,
但回首看往事仍然历历在目

あの頃みたいに 君に
優しく できているかな 今も
いちばん大切なのは その笑顔
あの頃と 同じ
还能一如往昔 对你温柔么
到如今 最重要的是 那个笑容不曾改变

東京の空は 今日も 高く すんでいる
君の 住んでいる街は 冬の色ですか
东京的天空 今天也是高远的啊
你住的街道是否已是冬天的颜色了呢?

がんばっても がんばっても うまくいかない
でも 気づかない ところで 誰かが きっと 見てる
无论怎么努力,怎么努力 都无法表现的很好
但是不要在意 一定有谁在某处关注着你

あの頃みたいに 君に
優しく できているかな 今も
いちばん大切なのは その笑顔
あの頃と 同じ
还能一如往昔 对你温柔么
到如今 最重要的是 那个笑容不曾改变

あの頃みたいに 君に
優しく できているかな 今も
いちばん大切なのは その笑顔
あの頃と 同じ
あの頃と同じ
还能一如往昔 对你温柔么
到如今 最重要的是 那个笑容不曾改变
不曾改变

Time flies, birthday comes again, a  lonely birthday.A common year, not good but also not very bad. Whether sad or happy, I need go ahead.

通过手机来控制家电

心血来潮想通过树莓派对家里的电器进行控制,网上查了不少资料,决定动手一试。首先决定对电暖器开刀,这个电脑有一个红外的遥控器,可以开关、定时、设定高低档功能,我要做的就是模拟遥控器对其发出指令。初级篇,通过电脑命令行进行控制,高级篇使用手机进行控制。

参照baoxiaozhong的红外接收http://www.shumeipai.net/thread-12265-1-1.html 设置好了红外接收器,然后尝试用相似的方法实现了红外发射器,成功控制电暖器,后续将考虑控制电视,空调等 设备。

初级篇:用电脑来控制电暖器

原理:

先通过红外接收模块,采集遥控器的指令,然后通过红外发射器模块模拟遥控器发送红外指令控制。

环境:xbian 1.0 alpha4

硬件:taobao上淘的10多块一个的红外接收模块及红外接收模块,此处不发地址,免得广告嫌疑。

连接方式:

红外接收器
vcc 连 pin1 (3.3v)
gnd 连 pin6(ground)
data连 pin12(gpio18)
红外发射器
vcc 连pin2(5v)
gnd连pin6(ground)
data连pin11(gpio17)

为什么这么连,我查了很久资料,后来在lirc_rpi原作者网站看到了,大概固定在程序里面了。
地址:http://aron.ws/projects/lirc_rpi/

步骤:
先通过红外接收器接收遥控器的编码,请参照http://www.shumeipai.net/thread-12265-1-1.html.
在用户目录生成了lircd.conf文件

我生成了KEY_UP,KEY_DOWN,KEY_0,KEY_1等分别代替开启、定时、低、高四个按钮

然后将它拷贝到/etc/lirc/remotes下,
sudo cp /home/xbian/lircd.conf /etc/lirc/remotes/xxx.conf (xxx随便你起名字,但是要和后面统一)
sudo vi xxx.conf
修改 name /home/xbian/lircd.conf 为 name xxx

sudo /etc/lirc/lircd.conf
增加一行

include “/etc/lirc/remotes/xxx.conf”

保存退出
现在可以测试了
sudo irsend SEND_ONCE xxx KEY_ON
sudo irsend SEND_ONCE xxx KEY_TIMER
sudo irsend SEND_ONCE xxx KEY_LOW
sudo irsend SEND_ONCE xxx KEY_HIGH

开始享受电暖器滴滴接收命令的的声音吧。

高级篇:通过手机来控制电暖器

安装LNMP
参照http://geekpi.cn/blog/2012/10/1908

apt-get install mysql-server mysql-client nginx php5 php5-fpm php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps
php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

mysql我没有做优化

配置nginx
先配置/etc/nginx/nginx.conf,需要做的就是限定线程数和开启gzip支持,gzip开启后将大幅降低传输html的流量占用。

worker_processes 1; #只有一个CPU,单进程即可

worker_connections 256; #一般支持100在线连接就达到raspberry pi的极限了

gzip on; #gzip开启取消前面的#让默认设置生效即可
gzip_disable “msie6”;

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

接下来设置/etc/nginx/sites-avaliable/default ,配置站点属性

root /var/www ; #站点存储位置

index index.php index.html index.htm; #加入index.php为默认页面

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

#开启php解析,使用php-fpm作为Fastcgi通信模块

然后配置php sudo权限,这样php执行命令的时候不需要输入自己的密码
为 nginx,而想透过 PHP 发送irsend,用 root 输入指令 vi /etc/sudoers,
在档案最底加上以下一行:

www-data ALL=NOPASSWD: /usr/local/bin/irsend

在/usr/share/nginx/www/下 编写cmd.php

<?php
$cmd = $_POST[‘cmd’];
if(!$cmd){
$cmd = $_GET[‘cmd’];
}
$device = $_POST[‘device’];
if(!$device){
$device = $_GET[‘device’];
}
if($cmd&$device){
$cmdline = “/usr/bin/sudo /usr/local/bin/irsend SEND_ONCE “.$device.” “.$cmd ;
echo($cmdline);
$output = shell_exec($cmdline);
echo($output);
}
?>

然后就可以通过http://ip地址/cmd.php?cmd=KEY_UP&device=xxx控制你的设备了。
这里的xxx是可以不同设备的哦。看你前面irrecord里面配置的

当然这种方式操作不方便,和shell操作差不多,所以可以自己做一个html页面,放上若干按钮,每个按钮分别调用cmd.php上面的指令。

这是个简单的例子

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<meta name=”apple-mobile-web-app-capable” content=”yes”>
<title>智能家庭控制台</title>
<script type=”text/javascript” src=”js/jquary-1.7.1.js”></script>
<script type=”text/javascript”>
var xmlHttp;
//创建XMLHttpRequest对象
function createXMLHttpRequest(){
if (window.ActiveXObject){
xmlHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}else if (window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
function checkMe(url){
createXMLHttpRequest();
xmlHttp.open(“post”,url,true);
xmlHttp.onreadystatechange=send; //用send函数进行发数
xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded;”);
xmlHttp.send(null);
}
function send(){
//alert(“指令成功发送!”);
}
</script>
</head>

<body>

<div id=”content”>
<div id=”menu_mode”>
<ul>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_ON&device=heater’)” value=”开/关”/></li>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_LOW&device=heater’)” value=”低档”/></li>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_HIGH&device=heater’)” value=”高档”/></li>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_HIGH&device=heater’)” value=”定时”/></li>
</ul>
</div>
</div>
</body>
</html>

然后通过http://ip地址/index.html访问

对于使用iphone或者ipad的用户,还可以把网页快捷方式放到主屏幕,打开就是一个操作界面,是不是很来福啊?

安装Siri Proxy

本文为本站首发,树莓派论坛转载,如果需要转载请注明作者及出处。

原文地址:
http://www.idownloadblog.com/2011/12/09/how-to-install-siri-proxy-tutorial-video/

安装之前,需要下面几个先决条件:
1.最好安装一个ubuntu.可以实际安装一台机器,也可以装在虚拟机上
2.只能安装在4s上,我未测试其他设备,可能不能工作,而且不合法
3.只有连上wifi的时候才可用,并且iphone和siri proxy在一个局域网内。虽然可以通过vpn远程,但是我尽量保持简单和直接
4.本文只覆盖初始化安装,以后我告诉你们如何增加一些插件来增加体验
5.任何人都可以做到,包括你,不要害怕
6.最后,感谢Pete创建了SiriProxy,并提供基础

如何安装:
预备步骤:
1.如果已经有了ubuntu,直接下一步。没有的话,可以在windows或者mac上装一个,mac上可以装Parallels或者vmware fusion运行ubuntu虚拟机,我用的是parallels
2.安装ubuntu的最新更新,参看视频1:00时刻(视频需要翻墙)
3.如果你用paralles或者其他虚拟机,需要设置虚拟机实通过bridge模式,这样可以联上互联网,参看视频4:00
4.设置dropbox,这是个可选步骤,我觉得这样方便一些。你需要有地方传输你iphone上生成的证书,你可以用邮箱,我用的是dropbox

命令行步骤:

这些步骤都可以参考视频,每个都有时间戳作为参考。简单的在终端复制粘贴这些命令,然后按照指令执行。

命令1:时间:5:44(此处安装必要的库)
sudo apt-get install dnsmasq ruby build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
选择y继续,

命令2:时间6:13
sudo nano /etc/dnsmasq.conf
找到62行: #address=/double-click.net/127.0.0.1
在他下面增加:address=/guzzoni.apple.com/(你机器的ip地址)
按ctrl+o,回车保存,按ctrl+x退出

命令03: Time 7:42
sudo /etc/init.d/dnsmasq restart

命令 04: Time 7:55
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
命令 05: Time 8:20
[[ -s “$HOME/.rvm/scripts/rvm” ]] && . “$HOME/.rvm/scripts/rvm”
命令 06: Time 8:33
echo ‘[[ -s “$HOME/.rvm/scripts/rvm” ]] && . “$HOME/.rvm/scripts/rvm” # Load RVM function’ >> ~/.bash_profile
命令 07: Time 8:47
rvm install 1.9.3

这条命令需要执行一段时间,尤其编译阶段

命令 08: Time 9:22
rvm use 1.9.3 –default
命令 09: Time 9:32
git clone git://github.com/plamoni/SiriProxy.git
命令 10: Time 9:49
cd SiriProxy
选择y继续(我感觉不对,没有去验证)

命令 11: Time 10:06
rake install
命令 12: Time 10:21
mkdir ~/.siriproxy
命令 13: Time 10:31
cp ./config.example.yml ~/.siriproxy/config.yml
命令 14: Time 10:43
siriproxy gencerts
命令 15: Time 11:04
siriproxy bundle
命令 16: Time 11:23
rvmsudo siriproxy server
这条命令启动Siri Proxy,成功的话,会提示”Starting SiriProxy on port 443..”

在iphone 4s上设置

1.首先你要取得我们在上面第14步生成的证书,在4s上安装。你可以使用dropbox或者邮件传输到iphone,看视频的11:40
这个证书在 ~/.siriproxy/ca.pem,你需要查看隐藏文件,一旦证书到你的iphone,选择安装,参照视频12:44

2.进入iphone wifi设置,选择wifi连接左边蓝色简单按钮,记住,你的手机需要和你的siriproxy在一个局域网。在dns那里,把dns修改为siriproxy的ip地址,参看视频12:59

3.测试siri,按住home键,说“test siri proxy”,siri会回复你,“siri proxy is up and running”,在你的终端上面会显示你的语音包。

虽然看起来很复杂,你大概需要不到一个小时。

通过树莓派从近太空发回实时图像 [翻译]

原文地址:

http://www.daveakerman.com/?p=592

越来越多的人喜欢访HAB(放高空气球),爱好者使用标准气象气球将小设备(一般100克到1公斤)发送到近太空(大概距地面30公里),一般会携带跟踪设备(这样可以在飞行过程中知道气球的位置),并且通常会带一些传感器(比如温度、压力等),有的还携带摄像机或照相机,将照片保存在SD卡中,方便之后取回。 跟踪器的作用是从GPS接收器读取作为,可能的话,读取传感器的内容,按照一定的格式通过低功率无线设备发回地面。飞行必须通过预定的路线,保证安全的情况下飞行,比如说避开机场和人口密集地区,并申请许可,比如在英国需要的到CAA的许可。我们使用70厘米无线频率(大概是434MHz),使用RTTY(无线电报)发送遥感信息到一些地面由其他爱好者建的接收站。从接收器接收到的遥感信号都会发送到中央服务器,并画出实时的地图,只要连上英特网大家都能看到。这个系统运行的非常好,已经被用来跟踪800公里距离的小设备,但是发射器必须低于英国法律规定的10mW。

五月初我接收到我第一个树莓派计算机,在我准备利用飞行计算机之前,已经放飞了好几次高空气球。前几次基本都是用Arduino迷你板,因为它很小,轻到几乎没有,简单,并且很省电。对比Pi,感觉它没有任何优势。当我看到它的usb口可以提供快速、简单、廉价网络摄像头,也就是说我可以提供实时地照片(SSDV),这个大概尝试的人不多。

近太空是个比较恶劣的环境 – 不到1%的空气,温度低至零下50度,任何一个东西出问题,他就会一直出问题。无线链接是单向的,也就是说没有机会远程做类似”sudo reboot”的操作,让它关机并重新启动!下降过程非常暴力,所以即使是SD卡插座也是一个潜在的失败因素。PI比我们通常的主板复杂,没有SD卡,没有USB,甚至没有操作系统,所以额外的电力和功能都是由代价的,第一个是增加大约60-500毫安的电流,意味着更高的功耗。人们一直都担心近太空的低温,如果你的设备只靠几瓦的电力驱动,这也许就不再是个问题。我反而更担心设备中间变得太热,所以我在PI上加了散热片。

我用特殊的热粘合胶把散热片粘在USB/以太网芯片上以及3.3v稳压器上。他们通常都会变暖但是不会太热,我担心在1%稀薄空气中(对流太少)他们会变得太热。你还可以看到有两条线直接连接5V,比使用一个连接器,焊接更可靠一些。另外一个修改是拆除了S2的视频接口,可以增加空间容纳我的扩展板。最后的修改是降低USB保险,因为我的摄像头电流需求超过其额定值。然后我增加了一块板来安装Radiometrix NTX2无线发射器来发送遥测及图像到地面,并连接到一个简单的GPS接收器上的线尾,这样他可以远离我的发射器。

最后的一项是合适的电源。劲量锂AA电池是显而易见的选择,因为它们可以在零下40摄氏度条件下工作到,而且适合大电流(500mA以上的PI加上网络摄像头)。在30公里上空,通常会降到零下50度,即使只有最少绝缘,电池自身发热也能保证其在可控范围。PI需要5V电压,所以我用6个AA电池加一个外部的低压降线形稳压器给它提供足够的电压,直到没电为止。稳压器大概有3瓦,所以需要一个散热片。对于小负载来说,这个热量太高,因为这是绝缘体。当然你也不想它变得太冷,因为这样也会影响其它部件。我订购了一些开关稳压器,但是在我放飞之前还没到货,我只好用线性稳压器。

通常,NTX2通过GPIO口发送1或者0,以一定的速率发送无线电报(RTTY),比如每隔20ms,按照50波特率。如果是在AVR或者PIC单片机上,这个非常容易,只需要设置延时或者时间中断。但是Pi运行的不

是实时操作系统,我无法控制一个正确的时序,特别是当系统正在忙于拍照。还有其它的方式,但我选择了最简单的方式,通过串口来控制NTX2。RTTY使用正常的RS232串行标志和占空以及停止位,所以

为什么不用硬件的UART来做计时呢?没有花太多时间写了一小段C程序来以4800bps打开串口,读取GPS数据来获取经纬度及海拔,然后关闭端口,并重新以300bps发送电报(我发现如果不先关闭再重新打

开串口,经常不太稳定)。当然,做这个的时候,需要关闭串口的登陆提示以及内核消息,但总之还是比较简单。我将一个标准的Debian镜像写在一个4G的SD卡上。

为了获取实时的图像,我只能给debian打了一个补丁,终于能够将摄像头识别为/dev/video0.我尝试了好几种摄像头,最后选择了罗技德C270,他能够提供比较合理的质量、亮度,并且不贵(如果所有

设备都找不回来的话)。我尝试了好几种图片获取程序,最后觉得fswebcam最好。别忘了,无线系统带宽很低,通常要飞2个小时,所以我们没有时间发送大图片,所以没有必要选择非常好的摄像头和高

解析度。我权衡了质量和传输速度,觉得432×240的分辨率,50%压缩率比较适合。 我测量了摄像头电流,空闲时50mA,拍照时大概是250mA,所以需要缩减USB保险(最大140mA).写了一个脚本每30秒拍

张照,保存在SD卡上,跟踪程序会选择最好的照片(最大的文件)进行传输。每个选中的文件会转化成适合下载的格式(分成块,每块都带FEC校验),每次发送一块。我把图片数据分散在无线电报中-每

个电报中包含四个图像数据包。这是PI的自拍照:

经过完整的试验和测试,取得CAA的许可,我作了一个盒子,里面装了Pi、摄像头、GPS、电池和稳压器。我不想使用太多绝缘体,这样才不会使里面太热,所以我用了10mm的EPX材料。低于这个厚度的话

,可能会变形。

升空那天,根据风向,预计会按照S型轨迹飞行,从我家(West Berkshire)附近的升空地点,先向南,再向东,然后一直向北,直到在高海拔的地方转向西面。下降的时候,会按照相反的顺序改变方向

,最后降落在Chilterns附近。当天天气不错,应该不会出现意外,我开始给气球充气。我申请了可以飞两次,所以我的朋友兼爱好者Anthony Stirk可以放飞他做的跟踪器。因为有3个跟踪器以及两次飞

行许可,我们选择了升空一个带小光线跟踪的大气球,另外一个气球带上了Anthony的大跟踪器和一个GoPro高清摄像机,然后把Pi放里面。经过一番思考,我们决定把第三个跟踪器作为备份,确保GoPro

能够找回来。

放飞的那天终于来了,同时也等来了雨,因为天气预报是阵雨,我们就到升空地等到变成了毛毛雨。我们先放飞了带着小负载的大气球,这样Anthony可以尝试记录坐标。然后我们放飞了后面这个复杂的

东东,我的Pi在最上面,然后是GoPro,最后下面是备用的Buzz跟踪器。这张是飞行前的Pi:

和即将升空的气球:

整个一串东西,包括降落伞和3个设备大概1kg左右(何我最初试验相同),从气球到最低的设备大概有60米长。升空非常有趣,最开始风很小,几乎是垂直升空。后来风稳定了,气球按照一个角度升空

,它可以顺利的按照我能达到的最快速度升上去。直到顺利升空我才放松下来。这巨大一串东西冲入云中,让人印象非常深刻。

升空地在我住的村庄,之后我们开车回到家中,在“任务监控中心”看它传回来的照片。预计的落地点不远,我没不需要急急忙忙的去追赶,我们有足够的时间回来看照片并吃点东西。

第一架飞行器是海拔高度尝试,根据经使用的制造商和大小,要不在27公里之前就爆炸了,要不超过预计范围,跑到了40公里之外。实际上,前几个地方的海拔高度纪录表都是用这个牌子和尺寸。Anthony一直就在看紧紧盯住屏幕看遥感数据。

那个时候,我当然更关心树莓派到底运行得怎么样。GPS位置还显示在发射场地,这是个明确的干扰GPS信号。我还没确定是不是,但GPS接收器和天线非常靠近Pi和摄像头。下次我会增加一些距离。然而图像很好的传输过来了,不仅通过我家的天线和接收器,也可以通过全国各地的其他接收机接收。气球升的越高,图像的质量更好,越来越多的接收器接收到了更好的图像,甚至远在北爱尔兰(远在500公里之外,对于10mW已经很不错了)。现在饼型飞行还没完全出来。下图是一个饼图显示了不同的监听器接收到的图片数量。

第一架飞行器还在不断的攀升,最终达到了第4区,只比世界纪录低了300多米。一方面我希望它飞得更高些,一方面我很高兴它没有在第二区就挂掉。然后,气球爆炸了,最初下降还算正常。但是多数气球还挂在上面,成功地变成了一个降落伞的形状,速度减到大概2米每秒的速度,在这个高度,正常速度应该是这个的5倍以上。谈到主要的飞行,它一张一张发回的图像,没有出现任何错误,而且一张比一张更好,直到飞到最后越来越高。

 


我们预期它在34公里处爆炸,但很明显气球不完全符合我们的计算。它经历了34公里,35公里,最终在40公里处爆炸(准确的说是39994米,在海拔记录里面排12位)。对于一个中等大小带着1公斤负重的气球来说,已经非常惊人了。气球爆炸了,也就是该我们取出追车了,两辆车都配备了天线、无线电接收器、解码和底土,还有3G网络。预计降落点靠近Didcot,所以我们前往那里,然后停车确认最新的预测降落点。设备最终降落在密尔顿高地,我们离它不远,离发射场只有几英里。令我们惊讶的是,有一个接收器离它非常近,接收到了实时的图像。过了一段时间,大家都能看到设备落到了长长的草丛里面。


Anthony最先从他的车里看到设备,在球场边上的草丛里。得到俱乐部的允许,我们拿回了所有3个设备和降落伞。

同时,前一个飞行物还在下降,但非常慢。只有我们预期的1/5.我们不知道具体的时间,但是我们知道已经被降落伞接管。然后在最后的几公里,它急剧下降(可能是乳胶撕毁了),最后降落在牛津北边的一块地上。这里的海拔不太常见:

花了我们不断地时间来找到它的位置,但它似乎在一个比较难靠近的地方。随着雨越来越大,Anthony 决定收工,而不是找一个只值50镑的跟踪器。然后他开走了。我上网告诉其他在UKHAS聊天室的爱好者我也要回家了,“它就在A34附近的停车场”,有人告诉我,“很容易就拿到”,“雨5分钟就停了”。嗯,好象没有那么糟,我往北开到A34,然后回到南边的停车处。

嗯,上面的三句话,只有第1条是正确的,只离停车处155米。但是暴雨一直在下,我只能在车里等。最后,我决定出去了,爬过树木和灌木丛去找,前面有片五尺高的玉米地。已知没找到那个设备。失败后,我走到车边,用我的anroid手机打开HamGPS软件来确定设备的位置。花了很多时间才到哪里,我感觉我在演“疯狂的戴夫”,当我到达目的地,我钻进了设备和气球中间的尼龙线。这的确看不到,直到我爬到最顶上,最终成功拿到。

所以,一切的一切,伟大的一天。所有的4个跟踪器全部回收,并且我们得到了令人惊叹的图像。如果有兴趣,可以访问UKHAS网站。更多的图像和视频,请访问:

All SSDV images

Photos from the day

pAVA Inflation Time-Lapse

Burst video from the GoPro

Launch video of PIE1, uAVA and BUZZ8

Landing video from the GoPro

Recovery of PIE1, uAVA and BUZZ8

Anthony’s Write-Up

感谢Anthony Stirk开车从阳光明媚的约克郡到最严峻最黑暗的Berkshire,并且提供GoPro HD相机, 感谢Phip Heron提供我们摄像头成像和编码软件,感谢Nick提供帮助,当然还要感谢我的妻子Julie让我们吃饱喝足,而且帮我开车,而我只需要做技术方面的东西。

 

 

用Siri来控制车库门[翻译]

本文为本站首发,在树莓派论坛转载,其他网站转载需要指明出处及作者信息。

原文:
https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=25118&hilit=siriproxy&sid=aa0660b88dd63482d287d7fb089e0d60

hi,这是我第一个树莓派的项目,SiriProxy。它运行在树莓派上,使用wiringPi访问派的GPIO口,并发一个延时的on/off信号。这个延时信号用来控制我车库门。所以我可以在iphone上用siri来控制我的车库门。

可能有其它的方式来做同样的事情,比如在Pi上跑一个web服务器来访问Pi的GPIO端口,但是我只是简单的做了一个,符合我自己的需求,并且运行的一切正常。

我的派在整个安装过程中都用root用户运行,这样可以比较简单一些(原文粗制滥造)。我用wheezy版本。

下面这个链接 http://www.idownloadblog.com/201 … oxy-tutorial-video/ 告诉你怎么安装和运行siriproxy。如果你按照这些步骤,并且把11,12,13步的顺序更换为12,13,11。顺便说一下,命令7大概需要在PI上编译90分钟。

然后开始安装wiringPi,可以从 https://projects.drogon.net/rasp … wnload-and-install/ 获得。

一旦这些都安装好了,我们只需要更改一下siriproy里面自带的ruby脚本的例子。
编辑/root/SiriProxy/plugins/siriproxy-example/lib/siriproxy-example.rb 文件

找到这几行:

listen_for /test siri proxy/i do
say “Siriproxy is up and running!” #say something to the user!

request_completed #always complete your request! Otherwise the phone will “spin” at the user!
end

在它后面追加这几行

listen_for /open the garage door/i do
say “Opening the garage door..”
request_completed
system(“gpio mode 1 out”)
system(“gpio write 1 1”)
system(“sleep 0.5”)
system(“gpio write 1 0”)
end

listen_for /close the garage door/i do
say “Closing the garage door..”
request_completed
system(“gpio mode 1 out”)
system(“gpio write 1 1”)
system(“sleep 0.5”)
system(“gpio write 1 0”)
end

你可以看到,ruby脚本简单的用system命令来访问wiringPi,设置GPIO针脚作为输出端口,设置它半秒高电平,半秒低电平。

你可以让siri调用任何你在命令行终端能用的命令,比如说通过无密码的SSH登录到远程的电脑让它关机或重起。

listen_for /turn off my laptop/i do
response = ask “Are you sure you want me to shut down your laptop?”

if(response =~ /yes/i)
say “OK, I’ll shut it down now..”
system(“ssh root@192.168.1.74 shutdown -h now”)
else
say “OK, I wont!”
end

request_completed
end

你可以把树莓派放在不同房间使用不同的命令控制,但只使用一个siriproxy服务器。注意:每次你修改完配置后,你需要在重起服务器之前运行”siriproxy bundle”命令。

这里还有一个我安装过程的演示视频。

http://youtu.be/NUJ5z76Xv5o

墙内的朋友安了吧,墙了。

通过Raspberry Pi实现无障碍上网

最近貌似google的服务实在不给力,搜索一直都无法打开。正好发挥手头树莓派的功能,来实现家庭无障碍上网。

网络环境:树莓派通过无线连接路由器,其他电脑通过树莓派中转,国内网址直接走路由器,被墙网址通过VPN出去。

首先设置树莓派,通过无线上网:

1.无线配置,修改/etc/network/interfaces,下面的SSID,PASSWORD换成你自己的

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.88.10
netmask 255.255.255.0
gateway 192.168.88.1
wpa-ssid "SSID"
wpa-psk "PASSWORD"
wireless-power off

2.安装ppp客户端

sudo apt-get install pptp-linux

3.Next, Create a file in /etc/ppp/peers with arbitrary name and the following contents:
在/etc/ppp/peers目录创建一个文件,其中VPNHOSTNAME,$USERNAME,$PASSWORD换成你自己的帐号密码

pty "pptp $VPNHOSTNAME --nolaunchpppd --debug"
name $USERNAME
password $PASSWORD
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
debug
persist
maxfail 0
defaultroute
replacedefaultroute
usepeerdns

3.测试vpn拨号是否成功

sudo pon 配置文件名

然后ping www.facebook.com看是否通过。

4. 启动内核的IPv4转发

sudo sysctl -w net.ipv4.ip_forward=1
记得同时修改/etc/sysctl.conf保证重启也有效。

5.下载chnroutrs.py,用 chnroutes 生成路由脚本(google chnroutes.py,头条就是)

python chnroutes.py -p linux

会生成ip-down,ip-pre-on等文件。

执行ip-pre-on,会把所有的国内的ip地址段加入路由表。

6.在RPi中启动iptables的NAT转换

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

 

后来验证似乎还需要这几条指令:

iptables -A INPUT -i ppp0 -j ACCEPT
iptables -A OUTPUT -o ppp0 -j ACCEPT
iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
iptables -A POSTROUTING -t nat -o wlan0 -j MASQUERADE

其中wlan0是你的无线网卡的id,如果只有一块网卡,就直接用这个,不需要改了。

 

在你的客户端电脑上把网关改成PI的ip地址,dns改成8.8.8.8或者8.8.4.4,防止国内dns污染。看看是不是可以打开facebook之类的网站了?

不确定的话,你可以ipconfig /flushdns后,tracert不同域名,看看是不是走不同路由出去的。

tracert www.china.com 这个应该是走路由器出去的

tracert www.facebook.com这个应该是走VPN的。

所有网站畅通无阻的出去了,包括google随便什么关键字都不会重置了。

 

后记:俺VPN流量有限制,所以都没有加到自动启动里面,每次登录上去手动启动一下就可以了。如果需要自动启动,可以参考其他文章。如果不想每次都要修改dns和网关,在pi上建一个dhcp服务器,网关,dns都配在里面,自动获得就可以了。

比如下面的方法,让系统自动启动VPN

To start your VPN client on boot, you can follow the instructions onhttp://pptpclient.sourceforge.net/howto-debian.phtml (point 8 or 9, Hand configuration section)

An alternate method to make your VPN client run on boot is to make a script in /etc/init.dcontaining these contents:

#! /bin/sh

case "$1" in
  start)
    pon $/etc/ppp/peers/FILENAME
    echo "PPTP Started"
    ;;
  stop)
    poff $/etc/ppp/peers/FILENAME
    echo "PPTP Stopped."
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Then run:

update-rc.d [filename of script] defaults

To make it run at startup.

Raspberry Pi跑起来了

Raspberry Pi是什么?
引用维基百科的一句话:

The Raspberry Pi is a credit card sized single-board computer developed in the UK by the Raspberry Pi Foundation with the intention of stimulating the teaching of basic computer science in schools.

Pi 已经流行了一段时间了,找到一个开始测试。

入手第一件事,就是刷SD卡。从各个官网下载固件,然后烧到SD卡上。花了两天,把所有的固件都刷了一遍,总算把基本功能跑起来。

Raspberry PI官网固件,直接进桌面,体现了它的原始想法–教育,但是没有媒体功能,所有的东西都需要自己折腾,UI方面的折腾实在不想花太多时间,放弃。

Raspbmc,功能比较齐全,直接进入XBMC,Airplay只有声音没有图像,无线网卡无法启动,总不能从客厅拖一根网线到房间吧,只能放弃。

Openelec,直接进入XBMC,但是功能是在太精简,完全没办法在上面开发定制自己的功能,放弃。

Xbian,很精简,直接进入XBMC,无线网卡功能能用,但是Airplay直接无线。配置好了XBMC,加入中国视频网站的支持,至少摆在房间可以用来做播放器,后台可以用来做智能控制,就选这个了。

今天试了红外接收板接收遥控器信号,信号能够接收到,但是还没办法解码。或者不解码了,直接通过发射板发射出去好了,改天再研究。

实现目标,通过Pi能够通过红外来控制各种家电,比如电视、机顶盒、空调、dvd、取暖器;控制摄像头,可以实现监控;通过温度感应器,读取温度,然后启动取暖器或者空调;无障碍翻墙;做个定时撞钟发微博的机器人…

 

雨が止んだ The rain stopped [转]

雨が止んだ The rain stopped

二週間ほどの雨がやっと止んだ、 About two weeks of rain finally stopped

晴れ空は前より青くなってきた気がしますが、Feeling the sunny sky became blue than before,

急に千キロ以外の貴方の笑顔が頭に浮き出された。Your smile suddenly raised to my mind, since thousands miles away here

空が異なり、天気も違いますね Different sky, different weather

こちら雨の時、あそこは晴れだRaining was here, but sunshine was there.

こちら晴れた今日、貴方がいる所は、雨だろうね。Sunny here today, the place where you are, it would be rain.

君を思っています。Missing you.

愛していると言われた Said I love you

好きになったと言われた Also said I like you

けど、現実を飛ばせないことなので Time can’t go back

唯の思うだけでも、嬉しいです。Though only missing , I am  glad enough.

君の歌う、初めて聞こえた。Your singing, I heard for the first time.

陳小春の<僕はあの命がない> Jordan Chan’s I have no life that

想像より上手くて、綺麗だ。 Much better than expected, could be beautiful.

君は好きな音楽が<身不由已>、初めて分かった。Finally, understood why you like In spite of myself.

君の現在の全てのこと、知りたいです。Everything of your current, I want to know

だんだん、君の少年模様は大人模様に切り替えました。Gradually, your boy pattern changed to grownup

君は、私の人生の神様です。You are the god of my life.

神様のような君は、人間で暮して、慣れますか?As you like the god, do you still used to the life of the mortal world?

また毎日ニコニコ、大声で笑っていますか Are you smiling every day, laughing loudly?

話を聞いた、神様の君は、奥様の言うこと通り人間タイプになったね。

Heard the word of your wife, from god-like you, became a human type.

心、痛いですけど、君は幸せのことをお祈ります。Feeling acute pang, but still hope you be happy.

今までじゅうごねん間経ちました。15 years passed by,

貴方は私の最も熟知した见知らぬ人になった。You are the most familiar strangers of mine.

君、幸せでね。You, must be happy!

Aisiteru