骑到天边

To do

  • Create the Article and post it on Gitcafe & Github.
  • Setup Qiniu CDN.
  • Write the Article.
  • Find a way to orgnize Images.
  • Find a way to orgnize Videos.
  • Convert All Videos with YouTube.
  • Upload all Images and Videos to Qiniu CDN.
  • Write a script to mentain the image & video links location (refer to Qiniu CDN).

后续更新

  • 2014-09-18 这辆自行车,掉了……锁在在广汉市东西路德克士门口,买东西20分钟,中途我出来看了一次,第二次出来看已经没了,我就那么盯着空荡荡的电线杆,想着或许能再见或许不能再见。后来报了警,做了笔录。心里想着ta就这么没了,我还想哪天空了给ta洗洗,挣了钱就给ta把有点问题的后轮换掉。没想到ta走的比我还快,更让我痛心的是,ta可能会就这样被放到某个旧货市场,以另一个侮辱ta的价格被卖出去,这肯定是ta不愿意的。

我们到了

终于,在经历了24天骑行之后,我们到达了拉萨。布达拉宫,这座传说中的城堡现在就在我们的眼前。

骑行的每一天都很精彩,经常会遇到一些让自己深思的事儿,世界观没有太多的改变,更多地得到了加强。

Read More

Using FFmpeg to do some simple video process.

Tip:

zsh doesn’t support letters like ‘[‘, ‘]’ etc. so we need to add a Back Slash(\)

rake new_post\[“kicking the ffmpeg”\]

###Because

FFmpeg can’t concatenate .mp4 videos directly, but .ts is ok.

###So

We need to convert all .mp4 files to .ts, then concatenate them together.

####Convert

1
2
3
ffmpeg -i 1.mp4 -c:v copy -c:a copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -c:v copy -c:a copy -vbsf h264_mp4toannexb 2.ts
...
  1. -c:a copy to tell FFmpeg to copy the audio stream, -c:v copy has the same mean.
  2. -vbsf h264_mp4toannexb a encoder use to convert videos to .ts.
  3. -i input file

####Concatenate

1
ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts" -c:v copy -c:a copy -absf aac_adtstoasc output.mp4

###To simplify this, we need a script as a little program.

1
#Not implement yet

Rocking Rasperry Pi

##Keep in mind

  • Use sudo nmap -sP -T4 10.0.30.1-254 to detect connected devices.
  • Then use sudo nmap -v -A -T4 10.0.30.1 get all opened port and services on this machine.
  • Start a vnc server on raspi. vncserver :1 -geometry 1200x700 -depth 24
  • apt update use goagent proxy. sudo apt-get -o Acquire::http::proxy="http://10.42.0.1:8087/" update
  • Statistic folder size: du -h --max-depth=1

##View the video over mplayer
Install mplayer: sudo apt-get install mplayer

Rasperry Pi: raspivid -t 999999 -o | omxplayer

##Stream video over a network (Official Doc)
Install related tool (both client & raspi): sudo apt-get install mplayer netcat

Some Linux : nc -l -p 5001 | mplayer -fps 31 -cache 1024 -
(Record on the other side: nc -l -p 5001 | ffmpeg -r 31 -i - out.avi)

Rasperry Pi: raspivid -t 999999 -o - | nc 10.42.0.1 5001

##Camera Error

1
2
3
4
5
$ raspistill -o haha.jpg
mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn't be enabled
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates

Fixed by: Kernels >= 3.10: w1_gpio destroys i2c bus 0, raspicam doesn’t work anymore

##Connect to Wifi

  1. ifconfig: Enable your wireless device.
  2. iwlist: List the available wireless access points.
  3. iwconfig: Configure your wireless connection.
  4. dhclient: Get your IP address via dhcp.
  5. /etc/network/if-up.d/upstart
1
2
3
iwlist wlan0 scan
sudo iwconfig wlan0 essid rk_mint key s:password123
sudo dhclient wlan0

##Load Camera to /dev/video0 HELP

1
uv4l --driver raspicam --auto-video_nr

##Motion detect HELP

1
LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c ./motion.conf

Python Learning on

###Knowledge Points

####list

creates lists from iterables.

####else Clauses on Loops (python doc equals if no break else do)

When used with a loop, the else clause has more in common with the else clause of a try statement than it does that of if statements: a try statement’s else clause runs when no exception occurs, and a loop’s else clause runs when no break occurs.

for n in range(2, 10):
  for x in range(2, n):
    if n % x == 0:
      print(n, '=', x, '*', n // x)
      break
  else:
    print(n, '是素数')

####varible scope (view in python doc)

The execution of a function introduces a new symbol table used for the local variables of the function. More precisely, all variable assignments in a function store the value in the local symbol table; whereas variable references first look in the local symbol table, then in the local symbol tables of enclosing functions, then in the global symbol table, and finally in the table of built-in names. Thus, global variables cannot be directly assigned a value within a function (unless named in a global statement), although they may be referenced.

####default values in function definition (Default Argument Values)

The default values are evaluated(and evaluated only once) at the point of function definition in the defining scope, so that

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

will print 5.

透明网络

###目录:

  1. youtube下载视频(包括1080p).
  2. 翻墙.
  3. 不翻墙使用Google Search.
  4. 关于本文.
  5. 解释

###youtube下载视频

  1. 翻墙并打开youtube网站,
  2. 找到要看的视频,
  3. 点击浏览器地址栏,并复制该网址,
  4. 准备解析源地址
    1. Chrome下,简单下载720p视频 (推荐)
      1. 打开Ultimate YouTube Downloader的网站:Ultimate YouTube Downloader
      2. 点击下面的Download (New vx.x.x.x)下载这个扩展,
      3. 依次点击Chrome的设置–>扩展程序,再点击开发者模式打开开发者模式,
      4. 把Chrome浏览器窗口化(点击右上角叉叉左边的按钮),再打开文件管理器,在自己电脑的下载目录,找到刚刚下载的Ultimate_YouTube_xxxx.crx,把它拖到这边浏览器的扩展程序这个页面,松手,安装成功。然后就不用管了,以后会自动升级的。
      5. 现在打开Youtube的视频页面,后边多出来个下载下拉框,点击MP4 720p以720p级别的清晰度下载这个视频。
    2. 仅需要下载720p以下的视频
      1. 使用FLVCD的下载器: 打开flvcd downloader,并点击硕鼠Youtube专用下载器下载硕鼠的下载器,接下来就比较简单了,打开软件书如地址点击下载一气呵成(要记得设置http代理噢)——不推荐
    3. 需要下载1080p级别的高清视频(2013-11-25测试可用)
      1. 使用Kej’s FLV Retriever
        1. 打开它们的网站:Kej’s FLV Retriever
        2. 粘贴刚刚复制的网址到输入框中,然后retrieve now!注意要开着代理,一定要全开,使用VPN全局代理,如果是http代理,goAgent类的,要设置代理程序对所有网址都使用代理,不要使用pac自动识别的方式。
        3. 然后麻烦一点,点击下载页面中的下载此档案指向的文件,然后用记事本打开这个文件,复制所有内容,然后粘贴到下面的文本框中,
        4. 然后更麻烦一点,看到下面的Download (MP4(H.264), 1920 x 1080, no audio)了吧,这个视频下载下来是没有声音的,不过下面还是有audio only格式的音频供下载,有视频和音频,自然有办法合并音视频流。
        5. 点击那个Download (MP4(H.264), 1920 x 1080, no audio)下载视频。
        6. 然后再点击Download (M4A, 256 kbit/s audio only)下载音频。
        7. 注意下载的音视频的格式,两个文件是同名的,都叫videoplayback,但下载的时候一前一后,后者嘛肯定是有个(1)字样结尾的。
        8. 下载一个ffmpeg下来,Windows版已经编译好了的下载地址是:Zeranoe FFmpeg builds。注意自己的电脑版本,打开网页之后就找醒目的32-bit Downloads64-bit Downloads32位看左边,64位看右边,点第一个黑块Download FFmpeg git-xxxxxxx xx-bit Static就会开始下载了。
        9. 解压得到一个ffmpeg.exe,复制当前目录的路径,并看看当前目录在什么盘符下,然后打开命令行,切换到该目录(同时按win+r,输入cmd,按回车,输入cd,鼠标右键粘贴刚刚复制的路径,按回车,如果刚刚的ffmpeg.exe没解压到C盘,cd完了是没效果的,再输入刚刚记下来的盘符:,回车),命令行不要关。
        10. 调用ffmpeg.exe来合并视频,把刚刚下载的两个视频啊音频啊都拷贝到ffmpeg.exe下面来,然后在命令行输入ffmpeg -i "第一个文件的名字" -i "第二个文件的名字" -c:v copy video.mp4,然后回车。
        11. 然后就得到视频了。

Read More

大道至简,亦至繁

从什么时候,我感觉使用Linux就是个悲剧了呢?或许很早就感觉到了。

其实我很喜欢现在这样,命令行也可以让好多事情变得简单,比如,装个软件,用命令行只要打一行字母,软件就装好了,在Windows下面要去下载,然后一堆安装向导,还要时刻小心被坑。

调试手机的时候也方便了,不用安装驱动,Linux本身就是可以识别Android的,插上就有了。在Windows下面起码得下个豌豆荚什么的,点半天才能识别手机。

直到某一天,在Linux下面安装一个软件出了问题,妈呀这简直就是晴天霹雳,我准备吃午饭的啊!!翻阅大量资料,看别人的问答,花去半天时间,找到问题了,改了一下,安装好了,在Windows下还是点一阵向导,也安装好了。

再来就是某一天,这破Linux不认识我的手机了!不是可以免驱动吗?靠,去/etc/udev/rules.d/下面创建一个usb的配置文件,重启usb服务,再去.android下面修改一下SDK的识别配置,把自己手机的识别码加上去。在Windows下面还是安装了一个豌豆荚,按了一会儿搞定了。所谓大道至简,你别认真,你一认真这句简单的话解释起来比宇宙形成还复杂。

错误错误错误错误

尼玛,当今天晚上我升级了Android SDK,重新生成了Android的第三方Vendor标识文件,我手机又连不上了,当我重新添加了手机的ID之后,奇迹发生了,还是找不到。。。

2013-10-4更新:原来是adb_usb.ini里面添加手机ID的时候,忘了添加0x,即应该添加的是0x2717。之前真是没注意,就是凭记忆填了填。

Android Activity之间传递数据

Android在Activity间传递数据的方法有以下几种

###使用Intent绑定内容

###使用全局变量Application

这样无论在程序的什么地方用getApplication()方法拿到的Application对象都是MyApp的实例(准确的说是Application的实例,但明显就是一个MyApp,当然可以转成MyApp)。

如果在MyApp里面定义一些变量,再定义一些gettersetter,就可以在任何地方读取或设置这些全局变量。

####示例代码

#####AndroidManifest.xml

1
2
3
4
5
6
7
<application
android:name="org.rankun.learn_intentapplication.MyApp">
...
<activity>
...
</activity>
</application>

#####MyApp.java

1
2
3
4
public class MyApp extends Application {
public String attr;
//...
}

#####SomeActivity.java

1
2
MyApp myApp = (MyApp)getApplication();
myApp.xxx();

Read More

测量面积的工具

一个还没正式开始就被技术上劝下来的项目,曾经花了我很多时间来设想,下载了好几个相关传感器的Demo。

之前的基本构思是,通过加速度计(重力感应使用的传感器),获取瞬时加速度,通过不断的积分而获得当前速度,然后计算距离,然后绘制行动路径的多边形,然后计算面积。

致命缺点:由于速度经过积分而产生,定位误差随时间而增大,长期精度差;手机上面的加速度计本来精度就低,测量加速度的时候还要受重力加速度影响,通过一次卡尔曼(Kalman Filter)过滤,数据已经完全不能用来再计算速度了,已经废了,我还以为我们要怎么忙怎么忙,怎么辛苦做这个东西呢,结果根本就不能做。。

反正,不是因为这个不可能,而是因为设备精度太低,惯性导航仅被用在飞机等高造价的设备上。

下面是一些相关资料

一些关于词典和背单词的项目记录

几个月前换上了Linux,感觉不错:), 就是星际词霸怎么排版有点怪?而且单词本的也没有…其实主要是希望能有柯林斯词典

呵呵,没办法,不习惯每次都要打开浏览器,然后点击有道词典的链接,然后输入单词…
所以我就决定写个脚本来帮我做这些事情,项目位于:YoudaoDict,有需要的朋友可以clone并使用

YoudaoDict

YoudaoDict,名副其实,就是通过有道词典来查单词,支持且仅支持柯林斯词典

Features

  • 查询单词在柯林斯词典中的释义
  • 美式发音和英式发音
  • 加入单词本(脚本支持,需要自定义相关脚本中的变量)
  • 导出tab分隔符的单词本数据(可以导入到Anki这样的卡片工具中,配合复习,非常好用)

    Read More

为Octopress的Greyshade主题添加QQ空间的链接

其实做这个之前我想过有没有必要,因为编程社区会不会有必要访问QQ空间还说不定——不过后来我想,其实我的大多数社交活动还是在QQ空间上,FacebookGoogle+都上的不多,主要是现在还没贡献多少,在开源界的人缘还没积累起来。

好,废话少说,看过程,该方法适用于任一链接,可以添加任意链接。

Read More