2015年5月8日 星期五

Ubuntu 強制移除套件

這件事一開始是這樣的,公司裡主管有裝了 Windows 及 MicroSoft Office 的電腦(或筆記型電腦),資深的同事可能會有裝了 Windows 的筆記型電腦,但沒有 MicroSoft Office 的版權,所以他們可能裝了不同的免費版 Office,像是 Apache 的 OpenOffice, The Document Foundation 的LibreOffice,甚至對岸的同事可能是金山軟件的WPS Office。而像我一樣的菜鳥,就只能用沒有 OS 的準系統加上 Ubuntu ,然後用內建的 Libre Office。

2015年4月24日 星期五

Ubuntu 文字(程式)編輯器經驗小整理

Ubuntu 文字(程式)編輯器經驗小整理

最近亂裝了一些編輯器,分別為 gVim, Emacs, Sublime, Atom。分別紀錄一下這次的經驗。
1. Vim 一直是我自己常用的軟體,所以也最熟悉,只是這次裝了 ctags 之後卻沒作用,原因待查。(果然以前偷懶直接把別人的環境拿來用,最後該補的還是要補。)

== 補充 2015.04.24 11:51 ==
後來發現,可能是某個東西影響了快速鍵。我直接用 :tag XXX 是可以正常的跳過去,接著用 ctrl + t 也可以跳回來。但是 ctrl + ] 就沒有作用。亂試之下,發現現在用 ctrl + shift + ] 是可以達到原來的作用的。

== 補充 2015.04.24 14:28 ==
原因找到了,因為我裝 gcin 而裡面把 Ctrl + [ 跟 Ctrl + ] 拿去當作輸入 "「" 跟 "」" 了。
在設定視窗裡的「內定輸入法 & 開啟/關閉」(圖1)裡,


把「Ctrl 輸入標點符號」的勾拿掉(圖2)。
就恢復正常了。

2. Emacs,Vim 一直以來的老對手,沒有編輯/指令模式的切換,我認為對一般的使用者會比較好上手。指令多半是 Ctrl/Alt 加上某個鍵,這也很符合 Windows 使用者的習慣。只是指令很多,一時還記不起來。也一樣需要透過 ctags 之類的程式產生 tags 才有辦法達在 symbol 之間快速往返的功能。中文只能用 Emacs 內的輸入法,這算相當奇怪。

3. Sublime 3,其實我在 Ubuntu 上沒裝起來,只有在 Windows 上成功。對一般的使用者來說應該是相當習慣,甚至可以說學習時間幾乎等於 0。內建 "Go To Definition" 功能,但要用按滑鼠右鍵然後去選,而且…跳過去,就回不來了 0rz 。也支援多種外掛,不知道有沒有可以把它改良的比較完善的?

4. Atom,GitHub 推的 hackable Editor。主打"只要會用 JavaScript, CSS 就可以打造自己的 Editor",界面跟 Sublime 非常像,但因為使用網頁技術,啟動時有點慢,目前在裡面使用的狀況還好。中文支援度不好,我曾貼上一串中文,就完全變亂碼,把它關掉,程式居然就 Crash 了。跟 Sublime 一樣右鍵的選單裡就有 "Go To Definition" ,但我點了沒效果。不過倒是有 Ctrl+Shift+R 搜尋整個專案裡的 Symbol 的功能,但一樣,去了要自己想辦法回來,而且一樣需要吃 ctags 產生的 tags 檔。

以目前的熟悉度來說,如果 Vim 的 ctags 支援搞定,我還是會先用它。Emacs 和 Atom 都還需要時間研究與熟悉。Sublime…暫時就在 Windows 上用吧。

2015年4月2日 星期四

修改 Vim 的預設字型與配色

Vim 本身就有內建一些配色選項,可以用來取代預設值。而另外,因為 Vim 受到許多使用都的愛用,所以也發展出了許多不同的選擇。

而在 GVim 的 Edit -> Startup Setting 也可以設定 Vim 預設的配色、字型。可是當你點了這個選項後…它只是幫你把 ~/.vimrc 打開而己。所以還是一樣要自己編輯 .vimrc 的檔案內容。XD

2015年3月17日 星期二

Let USB-to-Serial work on Ubuntu 14.04

Let USB-to-Serial work on Ubuntu 14.04

狀況:
    使用廠商 EVB(內建 USB-to-Uart chip)連上 Ubuntu 14.04 但系統沒有出現 ttyUSB0, ttyUSB1 之類的裝置。
    因此 minicom 無法連上 EVB,連 console 都看不到,更不要說把編譯好的程式放到 EVB 上了。
   
解決方法:
1. 安裝 driver
# sudo apt-get install libftdi1 libftdi-dev

2. insert module
# sudo modprobe ftdi-sio

3. 把 ID 加進去(?) ("0a5c 43fa" 分別是 vendor ID 和 product ID)
# sudo su
# echo 0a5c 43fa > /sys/bus/usb-serial/drivers/ftdi_sio/new_id

2015年2月13日 星期五

新工作 - WiFi module

賣 WiFi module 的公司,跟賣 Router、Switch 的公司做的有什麼不一樣?
我在轉換跑道前也不太了解,以前做 Router 時,也是會買 WiFi module 回來用,那時覺得好像就是跟 Chip vendor 買 Chip 沒什麼不一樣?
可是我的新公司卻不是 Chip 設計公司。(製造、生產可能有點關系)

2015年1月23日 星期五

GVim 裡的複製、貼上快捷鍵怎麼用?

現在公司配給我的電腦裡面裝的是 Ubuntu,所以我就開始用 GVim 來處理程式。雖然有 gedit 比較接近大家平常使用習慣,但在程式碼的顯示上,還是 GVim 比較好看。(也許 gedit 也可以開 syntax,但我不會@@)

結果現在有時想要複製某一個單字或一小段文字,不是剛好一行的,我就不會了。雖然可以進功能表去選,但又覺得很麻煩。而它上面寫的快捷鍵我又看不懂?像複製:"+y,這個 " 是要按什麼鍵啊?所以只好上網 Google 一下。

如何讓 GVim 可以用 Ctrl+c, Ctrl+v 和 Ctrl+x?

我本來只是看不懂 GVim 上面複製、貼上的快捷鍵是什麼意思?(複製:"+y,貼上:"+gp)上網查了一下,結果查到了有辦法讓它變成跟大部份人熟悉的 Ctrl+c, Ctrl+v

How to make cut/copy/paste in GVim on Ubuntu work with Ctrl+X,Ctrl+C,Ctrl+V?


2014年9月25日 星期四

git merge "--no-ff" option


我最近發現了一個問題,就是我們如果直接用 merge 指令把分出去的 branch merge 回來。
它似乎會把 log  合併。所以就會造成 git log 裡面列出來的項目包含了 branch 的項目,這樣對於要找以前的紀錄真的是相當的困擾。

正巧在網路上看到一篇文章,裡面有提到相關的內容。
Git 版本控制 branch model 分支模組基本介紹
裡面主要的內容是在討論如何規畫一個專案的 branch。這個可能因為大家的需求不同,可以參考。而作者也提到他的內容主要是參考自:A successful Git branching model,而圖片也是從這篇文章而來。

相關的細節就請有需要的人到原作都的網頁去看了,我來說明一下我的重點 "--no-ff" option。

2014年9月3日 星期三

Let U-Boot support web server

出來混遲早要還的,夜路走多了總會碰到…。firmware 玩多了總有搞掛的時候,所以廠商要求我們要在 bootcode 裡面提供 firmware upgrade 的功能,而且還是要 web UI。

我們實際上的作法是因為前人有作過,所以就依樣畫葫蘆的搬過來用。不過這我就不寫的太仔細了。

那 open source 的世界裡有沒有什麼人提出解決方案呢?我有找到一個:
https://github.com/pepe2k/u-boot_mod
它有 support web server
https://github.com/pepe2k/u-boot_mod#web-server

2014年8月29日 星期五

How to add auto increased build number

有些軟體的版本號後面會有個 build number。這個是自動產生的,讓大家可以明確的知道自己產生的程式是哪版的。因為有時為了版本控制,不會每一次都在正式的版號上加一,但是又需要區分程式的差異,所以想出了這個方法。

這個方法,雖然早就知道,但從來沒自己實做過。現在真的要自己做了,一開始還真沒有頭緒。經過自己想想,加上參考手上的程式碼裡本來的版本資訊的內容(本來是用 build date)。想得到的大概就是產生一個檔來存放 build number ,然後在 make 時,去把檔案內容讀出來 + 1,然後也把這個 + 1 的值存回去。

2014年8月28日 星期四

2014年8月26日 星期二

警告訊息: function declaration isn't a prototype 與 C 語言小歷史

今天發現了程式中有一個警告訊息"function declaration isn't a prototype",想解決它,但是又不太懂它的意思,所以就上網查了一下。結果順便還學了一下歷史。
 原文:func(void):C 與 C++ 函式宣告的小差異

2014年8月20日 星期三

shell script 的追蹤與 debug

最近因為有新同事來,請他練習 shell script,所以我也上網找了一些資料。
結果找到了母校的老師寫的教學網頁。

其中有一個課程項目是: shell script 的追蹤與 debug

老實說,因為我們大部份用到的 shell script 都沒有太複雜,還真沒想過有什麼 debug 的方法,都完全使用人腦 compiler 在 debug。

2014年8月8日 星期五

抓取 Git branch 資訊

之前有一篇「Linux 提示字元」裡有提到,可以寫 function 來取得一些 git 的資訊,然後加進提示字元裡面。
我是由這個網站得到的:http://ihower.tw/blog/archives/5436

2014年7月15日 星期二

Git 指令筆記 - 命令列下的樹狀圖

雖然現在有很多具有 GUI 的 git 工具可以用,多人可以畫出清楚漂亮的樹狀圖, 可是很不巧的,因為我的系統還是 windows XP,綜合費用、系統支援,及實際安裝使用之後, 我的電腦上幾乎都有或大或小的問題,所以大部份的狀況我還是透過 command line 來使用 git。
不過在 GUI 上可以畫出來的樹狀圖,在終端機上卻一直不知道該怎麼讓它呈現出來?

2014年3月18日 星期二

VIM 刪除包含某字串的整行

有時用 grep 搜到的內容太多,可是有些內容很明顯就不是我們要的。以前我都傻傻的人工刪掉,又麻煩又怕會弄錯。

今天我實在受不了了,所以上網找了一下,發現它的確是強大的。

:[range]g/pattern/[cmd]
 
[range]表示範圍,或用直接用 g 表示 globe。 
[cmd] 使用 "d" 就可以刪除整行。

2014年1月28日 星期二

變數的長度及 printf 參數。

今天要把 MAC address 由字串轉成 16 進制數字時,才發現很麻煩。因為它是 6 個 bytes,太長了。尋找解決的過程經歷了一些故事,所以來記錄一下。

其實之前有碰到 memory address 的部份,由使用者輸進來的是字串,但運算時常常需要把它轉成 16 進制數字。在我手上的程式一般是使用 simple_strtoul 這個函式,但是它的傳回值是 unsigned long ,只有 4 個 bytes,所以長度不夠。

2014年1月23日 星期四

用軟體產生 flash image。

一般來說,要得到 flash 的 image 檔,應該是把你要的資料先用軟體的方式寫進去。全部寫完之後,再把 flash 拿到燒錄機去,用燒錄機讀出來。

但是這過程中,如果板子上沒有 socket 那就要解焊,解焊當然也是有風險。而且像我自己不會弄就要求助於人。然後我們公司燒錄機都在硬體部門,就要去借用,還可能要排隊。

因此,如果能用軟體就產生這樣的 image 會比較方便。

如何產生都是 0xFF 的檔案。

在 Linux 底下,一般都會用 /dev/zero 或 /dev/null 來產生空的檔案(內容為 0x00)。

例如: dd if=/dev/zer0 of=temp_file bs=1k count=1024

但是有時我們會希望產生內容全部是 0xFF 的檔案,因為 flash 裡面空的狀態就是 0xFF,
所以為了填補 flash image 空的部份,就需要這樣的檔案。

2014年1月9日 星期四

"!!" in C - C 語言中的兩個驚嘆號

有時候,會看到這樣的用法:
!!value

大家應該都知道 "!" 表示 "NOT",所以加了 "!" 0 會變 1 ,1會變 0。
以前學校是這麼教的,不過,其中倒是有一些小地方,不是這麼單純的。

首先,因為 C 語言的型態是很自由的(以前老師喜歡說是「很亂來的」)
如果變數的值單純的是 0 或 1,當然狀況就是像上面說的 0 變 1,1 變 0。