Practical

git入門

查了一些資源,但有些看了反而混淆視聽,把我學習過程中有幫助記下來。

0.高級字典 – Pro Git繁中版

http://iissnan.com/progit/index.zh-tw.html

1.快速抓到git概念跟使用git的方法

http://tech.marsw.tw/blog/2013/08/16/git-notes-github

2.Fork別人的東西

幽默的入門資源:http://site.douban.com/196781/widget/notes/12161495/note/269163206/

分散式工作流程基礎:http://iissnan.com/progit/html/zh-tw/ch5_0.html

3. 互動式的git學習工具

http://pcottle.github.io/learnGitBranching/

現在會用到的指令

1.要把東西push到repository

git add <files>
git commit -m "comment about this version"
git push

2. 送出Pull Request

Github getting started Tutorial: How to Fork Github Repository, Create “Pull Request” and Merge?

3. 遇到fork下來的origin/master跟origin/new-branch都比原本的repo還要後面,但卻想送PR

事情是這樣,當初fork了一份透明物體辨識的code,然後因為我自己要加上新功能,所以就在自己的master一直commit。後來想寫一份演算法的教學並送出PR,但問題是,我的master中有一堆我不想要推回原本repo的code,所以就很尷尬,因為就算我在電腦的lcoal端用rebase改回去,要push的時候也會被抱怨說跟網站上的不同步。研究了一陣子,發現一個解法。

先到電腦的local端,讓電腦端跟origin/master跟origin/new-branch同步,所以電腦端會有master跟new-branch。接下來可以做

git checkout master      //切換到master這個branch上
git branch -v            //確認自己的branch有哪些跟自己在哪個branch
git rebase -i            //修改commit歷史,把本地端的master復原成原本的repo
git branch tutorial      //開一個新的branch,這個branch的進度跟原本的repo是一樣的
git push origin tutorial //把這個新branch推到github網站上,那之後在這個branch的修改就可以發送PR了
....                     //一連串的修改跟新增檔案等等
git push origin tutorial //只把這個branch的修改推到網站上,這樣就不會造成master那邊的衝突

雖然問題是解決了,但感覺還是不太合理,因為沒道理不能把master復原成幾個commit之前,只是我目前的作法都是在本地端改完才push上去,然後就會被抱怨說會遺失掉網站上的版本歷史,我想一定還有什麼是我不知道的,有機會學到再補上來吧。

4.送出PR之後,作者又修改了某些東西,怎麼直接修改PR (謝謝林承澤大大熱心指導QQ)

這次的case也是因為幫ORK的透明物體辨識寫演算法的教學,所以我就送了一個PR。接下來作者跟我說,他要把原本的repo修改一下,方便未來寫教學可以很容易擴充。所以情況變成我的origin/tutorial做了a、也發了PR,而作者又做了b。那我該怎麼直接修改tutorial這個branch來讓PR自動更新呢?

git checkout tutorial
git fetch ork (先把他做的b給抓下來)
git rebase ork/master 
git rebase -i HEAD~2
在vi中把做了a的那個commit直接整行刪掉 & :wq
some editing
git commit
git push origin tutorial -f (-f表示強制推上去,把origin/master修改成跟本地端一樣)

這麼做之後,PR就會神奇地自動更新了。這是因為我發的這個PR本質上就是比較origin:tutorial 跟 ork:master 的差別,所以只要我硬是把origin/tutorial更新完畢,PR就會自己更新。

附上PR的連結:

https://github.com/wg-perception/transparent_objects/pull/4

Practical, Robotics

各種控制,一個overview

我覺得對於控制和系統有完整的概觀很重要,剛好這週上到連豊力老師的課,他講的例子非常好懂,所以我整理起來,幫助大家入門。

適應控制(Adaptive Control)
假設我騎一台腳踏車,但不知道後座載的人是誰,我只知道他的體重不變,所以我可以慢慢調整我踩踏板的力道、轉彎控制龍頭的幅度等等(這些就對應到控制系統的各種增益),讓我在載這個人的途中不斷讓騎車變得更順。

強健控制(Robust Control)
假設我騎一台腳踏車,後座載的人重量已知,但是這個人會隨著我騎的過程不斷晃動。我只知道他的體重不變,但他一晃動就會導致我的重心改變,假設我也知道他晃動的幅度,那我的技術就需要夠robust以確保在他的晃動範圍內不管他怎麼晃動,我都不會跌倒。

最佳控制(Optimal Control)
將我騎腳踏車這個系統完全用微分方程式來表示,只要我能夠把model建立起來,最佳控制就能幫我找到我踏板該踩多大力、轉彎時怎麼控制龍頭跟踏板等等。
最簡單的建模方法就是假設我踩踏板的力道是F,假設把腳踏車當作一質量為m的質點,那F=ma,那我就得到一個二次微分的方程式(因為加速度是位置的二次微分)。

隨機控制(Stochastic Control)
我騎一台腳踏車,可能因為有颱風或是萬里無雲導致我的空氣阻力是一個隨機變化的變數,但是空氣阻力大小會影響我的控制,因為阻力大我就得更用力地踩踏板以維持不會跌倒的速度,而隨機控制就提供一些方法讓我們可以合理地將空氣阻力model成一個隨機變數,用一個機率密度函數來表示,再併入控制器的設計。

Practical

Android遊戲 – 3D雪地大戰

這次網多實驗的PDA實驗要開發一個連線對戰遊戲,我們選了android平台,要在Nexus 7上面跑遊戲。

我考慮了滿久,在Unity跟ShiVa中猶豫了一陣子,甚至也考慮過超強的Unreal(不過Unreal有點過猛,初學遊戲就直接切入最猛的可能滑鐵盧啊),後來覺得ShiVa 3D易學性頗高,很容易發佈到各種平台,你只要寫完一個遊戲,就可以用ShiVa Authoring tool輕鬆發佈Windows版、Linux版、Mac版、iPhone版、iPad版、android版甚至是Wii,而且也有一些相關書籍可以參考,再加上他們的開發者網站資源算是豐富。

這次開發遊戲的經驗讓我學到滿多,因為做遊戲要考慮的東西比寫一般程式要來得多(應該是我目前寫的project都很小: p),要建立3D模型、找音效、建立地形跟場景、開發遊戲介面等等,再加上ShiVa 3D。這次時間安排沒有上次寫聊天室來得好,所以最後成品並不是非常完整,但我覺得該會的大家都有學會,只是需要更多時間把完成度拼上來。

最後附個DEMO影片~

Practical

GPU Programming筆記

之前有稍微看過GPU programming相關的資料, 感覺得出來是一門學起來會讓實力大增的學問.(根本是網多實驗寫遊戲的根啊XD)

因為看到一些資源實在太棒了,所以發一篇文把他記下來.

1.鴻鵠國際股份有限公司官網(看起來是台灣的GPU強者)

2.用GPU加速來做數值計算

3.2012台大GPU workshop影片

甚至還有簡報檔跟議程等等,不知道該說什麼了lol

4.Matlab Parallel Programming Toolbox影片教學

Practical

Android來電中斷處理

之前本來以為會寫純android app,所以事先調查了一下android app在執行中要怎麼處理來電.沒想到後來會決定用ShiVa 3D來寫遊戲, 不過查都查了,也有了一點基本觀念,就分享一下讓之後有需要的人

(其實我沒真正寫過,所以可能有誤)

基本上處理來電的原理就是通話狀態的監聽, 當通話狀態從閒置轉成來電的時候, 把app的狀態先存起來, 然後等通話結束之後才又把這狀態拿出來.

Reference:

1.Android游戏开发之旅(十五) 按键中断处理

2.Android监听通话正确操作方法介绍

3.android 电话状态监听(来电和去电)实现代码

4.What happens to android app when a phone call interrupts the app

5.Application crashed after either receive a phone call or such interruptions

6.如何中斷Android執行緒

7.Android學習筆記 – 通話狀態(PhoneState)

8.电话通话几种状态的监听

9.Get Phone State When Someone is calling using BroadcastReceiver Example

Practical

Android擴增實境相關資源

Practical

Java小畫家

上星期四才Demo完小畫家~

這星期四就要文字聊天室的小Demo了,還要交網路分析儀實驗的結報

網多著實不是個輕鬆的實驗啊,幸好今晚的討論滿有效率的,已經寫出多個client可以聊天了,

想先從檔案傳輸跟影音串流著手,這兩個寫出來其他應該就只是時間跟調整問題.

————————————————————————————–

以下是有點有用的資訊

如果要學寫小畫家的話,把幾個原理弄懂應該就沒問題了~

建議順序是:如何新增視窗並加入元件 -> 抽象類別 -> 介面 -> 元件加上事件處理 -> java繪圖(Graphics, Graphics2D) ->可以寫小畫家囉!

事件處理有一份很棒的投影片可以學習:

http://web.thu.edu.tw/s922930/www/java%B8p%AD%D7%A4W/0724/ch18.pdf

來放個圖跟code,之後有需要的人可以參考參考XDD

小小畫家code: https://github.com/Po-Jen/painter-lite (如果你覺得有幫助的話,請幫我在 github 上按個 star 吧!謝謝!)

啊因為我沒有把功能做得很齊全所以叫做小小畫家,不過我想基本原理掌握住比較重要啦XDD (<-自己說

小小畫家

Practical

網路與多媒體實驗默默準備

下學期要修網多實驗,pre實驗要寫小畫家XD

在學長的提點之下, 才知道這門課好好修可以帶來突破性的成長.

為什麼這麼說呢?

因為網多是一門重視實作的課程,而實作的關鍵就在於四個字 – “程式語言”. 於是我選定Java.

從一開始的小畫家先打好Java的基礎跟圖性介面程式設計的概念,然後藉由文字聊天室了解網路程式的基本,下一個PDA實驗選android平台來把Java的最熱門應用之一打起來, 小實驗雲端運算實驗可以玩個奇摩知識+的API開始把Knowrob跟中文知識接起來(Knowrob基本上也是用Java實作). 簡直一氣呵成.

——————————————–

為了因應學期中可能會研究網多兩頭燒很崩潰,寒假還是先把一些基本功打起來

實驗一 – 文字聊天室

實驗二 – 網路分析儀

實驗四 – PDA程式設計

實驗六 – 雲端運算與app

Practical

生醫工程概論考古題

我覺得生醫工程概論真是一門….就算唸了perplexity還是很高的一門課,而且居然都找不到考古題

這學期修完生醫工程概論讓我覺得學到滿多新知,我覺得學到組織工程跟再生醫學這一章就值回票價了!非常有趣!

不過我想成績還是要稍微顧一下哈哈,為了造福以後的學弟妹,放個連結

加關鍵字時間!

台灣大學,電機工程學系,考古題,生醫工程概論,宋孔彬老師,郭柏齡老師

Practical

Python簡體中文轉繁體程式

因為自然語言處理期末project要用到,花了點時間寫了個簡體轉繁體的程式.

是用別人寫的函式,所以程式很簡單.

流程是

1. 下載提供簡轉繁函式的函式庫(連結在這)
2. 解壓縮之後切進這個目錄

cd jianfan-0.0.1/

3. python setup.py build

rosfuerte@rosfuerte-K53SM:~/project/nlp/jianfan-0.0.1$ python setup.py build
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/jianfan
copying jianfan/__init__.py -> build/lib.linux-x86_64-2.7/jianfan
copying jianfan/charsets.py -> build/lib.linux-x86_64-2.7/jianfan

4. sudo python setup.py install

rosfuerte@rosfuerte-K53SM:~/project/nlp/jianfan-0.0.1$ sudo python setup.py install
running install
Checking .pth file support in /usr/local/lib/python2.7/dist-packages/
/usr/bin/python -E -c pass
TEST PASSED: /usr/local/lib/python2.7/dist-packages/ appears to support .pth files
running bdist_egg
running egg_info
writing jianfan.egg-info/PKG-INFO
writing top-level names to jianfan.egg-info/top_level.txt
writing dependency_links to jianfan.egg-info/dependency_links.txt
writing jianfan.egg-info/PKG-INFO
writing top-level names to jianfan.egg-info/top_level.txt
writing dependency_links to jianfan.egg-info/dependency_links.txt
reading manifest file ‘jianfan.egg-info/SOURCES.txt’
writing manifest file ‘jianfan.egg-info/SOURCES.txt’
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/jianfan
copying build/lib.linux-x86_64-2.7/jianfan/__init__.py -> build/bdist.linux-x86_64/egg/jianfan
copying build/lib.linux-x86_64-2.7/jianfan/charsets.py -> build/bdist.linux-x86_64/egg/jianfan
byte-compiling build/bdist.linux-x86_64/egg/jianfan/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-x86_64/egg/jianfan/charsets.py to charsets.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying jianfan.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying jianfan.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying jianfan.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying jianfan.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents…
creating dist
creating ‘dist/jianfan-0.0.1-py2.7.egg’ and adding ‘build/bdist.linux-x86_64/egg’ to it
removing ‘build/bdist.linux-x86_64/egg’ (and everything under it)
Processing jianfan-0.0.1-py2.7.egg
Copying jianfan-0.0.1-py2.7.egg to /usr/local/lib/python2.7/dist-packages
Adding jianfan 0.0.1 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/jianfan-0.0.1-py2.7.egg
Processing dependencies for jianfan==0.0.1
Finished processing dependencies for jianfan==0.0.1

5.然後就可以快樂地import了,可以參考我寫的小程式

import os
import sys
from jianfan import jtof

jian_file = sys.argv[1]

fj = open(jian_file, ‘r’)
original_content = fj.read()
fj.close()

translated_content = jtof(original_content)

unicoded = “”

for ch in translated_content:
unicoded += unicode(ch).encode(‘utf-8’)

fan_file = sys.argv[2]
ff = open(fan_file, ‘w’)
print >> ff, unicoded
ff.close()

使用方法是 python jian_to_fan.py [簡體檔案] [輸出繁體檔案]