google code-beautifer

星期二, 8月 01, 2017

EMACS usb 隨身碟版的配置

有時候想在外寫個無關機密的東西,但是不方便時時帶個筆電出門,湊巧有個安全的windows  機器在那可以讓你用USB碟可是你沒有管理員權限,這時在隨身帶的USB 碟上裝一套可攜版的 emacs 來寫寫文件不錯,不過既然都能跑emacs ,當然會想把自己家裡電腦整套.emacs 配置跟.emacs.d 裡面包山包海的套件也帶過來所以跟自家的環境一樣方便。這要怎麼做?其實不難:

可以在啟動emacs 的batch 檔裡設定環境參數:主要就是下面兩行
set HOME=%~dp0..\emacshome
"%~dp0\winbin\emacs-24.5\bin\runemacs.exe" %*

其中 %~dp0 就是windows 裡現行執行檔的現行目錄, 假如把這兩行寫到USB 碟上根目錄的一個檔案叫runEmacsUSB.bat,不管 USB 碟 是 e: 還是f:.... %~dp0 就是那個碟的根目錄,假定 USB 碟 是 e: 那 runEmacsUSB.bat 的位置在e:\runEmacsUSB.bat 而 %~dp0 就是 e:\
這個可以照自己喜好更動,我在  USB 碟 下開了一個子目錄 winbin ,然後又把整個emacs 隨身版拷貝到 winbin 子目錄下的emacs-24.5 裡,所以執行檔路徑就在e:\winbin\emacs-24.5\bin\runemacs.exe
這就是 runEmacsUSB.bat 第二行的前半段但是用雙引號刮起來 後半段就只是把參數全吃下傳給emacs
這樣這個在根目錄的批次檔就會去子目錄裡找到真正的執行檔
但是這個emacs 配置重點在第一行,他會指定 emacs 的家目錄 ,我是在USB 碟根目錄下開了一個子目錄叫emacshome ,然後把 .emacs 設定檔跟 .emacs.d 目錄全拷貝過去emacshome 之下,這下執行 runEmacsUSB.bat 就可以在USB 碟上跑全套 emacs 服務,在電腦上看大螢幕寫東西的爽度不是用手機可以比擬的

順帶一提,我試過emacs 24 跟25 版,在windows 10上某機器上, 25 版對我特製化的程式碼字型設定顯示不佳,會糊糊的。但是24 版不會,所以為了相容性我就沒有跑25 版

星期四, 6月 08, 2017

emacs 裡要快速跳躍記憶文件位置

編輯超過一千行的程式,要從不管是開頭或結尾跳到中間都會蠻痛苦的。當然emacs 也可以下指令一次跳好幾頁,但是要是不知道正確的數量一次到位,也是很麻煩,這時候需要有個好方法來快速跳躍:比如說在事情沒做完的位置先留個書籤,就可以先跑到其他的地方編輯(比如說回頭去修改定義,或前一次叫用的地方改個幾行),改完再按一個鍵跑回來
理論上要是cedet 可以辨識你的程式語言語法的話,應該是不太需要用記憶程式位置,不過有時候就是得在一些cedet 不是支援很好的文件裡跳來跳去作編輯,這時記憶程式位置就很有用

emacs 裡要記憶位置可以用register 或bookmark來完成:
register有個缺點: 一旦關掉emacs 這些記憶就被清掉,而且位置標籤名只能用單一字母。但是對於臨時要用的再方便不過,但是用 bookmark的話位置標籤名會一直記住,且位置標籤名可以取一個很長的名稱,比較不常用的位置這樣記會比較適合
用bookmark 的話,假如對某個檔是第一次叫用,預設的標籤名就是目前檔名,假如是針對多個檔案這當然是方便,但是對在同一個檔案裡跳來跳去就不便。

視這個變數對於修改的本質,我自己是這樣工作:假如是臨時要在一個檔案跳來跳去,而且一旦改完這個位置就不須需要記憶的,我用register 來處裡,位置名就取1, 2, 3, 4  ....
但是對於久久用一下的就用bookmark,當然bookmark 也是可以用單一字母來當標籤名
所以我通常都用bookmark 來處理,就像前面說的:短期記憶就用1 2 3 4 命名,需要長期記憶的再取個有意義方便回想的名稱
我有在.emacs設定下綁定兩個熱鍵F9跟 F12 來當設置書籤 跟跳到書籤去
(global-set-key (kbd "") 'bookmark-set)
(global-set-key (kbd "") 'bookmark-jump)

此外我有搭配hide-show mode ,先把目前不會去處理的一些副程式的細節收藏起來,真的要用時再打開。這樣編輯處理大程式就更清爽靈活

星期三, 6月 07, 2017

用 windows版emacs輸入中文

忘了是 23 版還是24 版之後的emacs 加入了unicode 支援,所以在新的winodws 上輸入中文還是改用unicode 編碼吧

得先把這兩行加到.emacs
(require 'unicode-fonts)
(unicode-fonts-setup)

在windows 下.emacs 他的路徑要放在\User\使用者名稱\AppData\Roaming\之下 (怪異的是我照新的方式在.emacs.d下設置init.el 沒用 )

中文輸入法我目前是用pime ,不過pime 1.10 或0.16對emacs 都有個問題:在按enter 之前,選字buffer 不會出現,但是按enter後選字buffer 的內容會正確送到應用程式裡
可是在其他編輯程式如emeditor下  pime都沒有問題

然後目前cygwin mate desktop下我沒有辦法輸入中文,可能跟它預設的ibus 輸入有關,
cygwin 版emacs其實可以用symbolic link 跟windows版emacs共用設定檔,但是額外安裝套件跟路徑得自己搞定

星期三, 5月 03, 2017

randr :多螢幕的空間配置變換

多螢幕的空間配置是門學問,因為螢幕通常是寬大於高,比較直覺的作法是把次螢幕放在主螢幕的上方,所以不用時時都頭抬的高高,有需要才抬頭,以gnome desktop 而言,他會把面板顯示鎖定放在主螢幕頂端,但是桌面的捷徑因為跟著桌面的左上角起開始排列,他們會跑到次螢幕去,

這用法一般工作還好但是有個問題,有些程式好像水土不服(比如說pluma 編輯器):除非你要是在次螢幕下進行使用pluma開啟檔案選單,不然的話,會發現pluma在主螢幕下進行的檔案開啟選單行為會很怪異,(基本上要是選單很長的話,他不會往下列而是往上列,但是因為Gnome shell 的面板taskbar 放在主螢幕頂端,他就認為到頂了就切掉而不會去利用主螢幕面板顯示更上方的次螢幕,所以明明螢幕空間很多,選單卻擠在一起)不過不是所有程式都是這樣,我認為是pluma 沒設計的很周全,不過gedit 被改到我很不順手,三不五時除了emacs 外我還是得用pluma寫東西。所以我是這樣設定:

一般需要專心debug 很長的程式之類工作而不需做檔案開啟之時,把雙螢幕切到上下並列的配置,不然才就是左右(而且以左邊的主螢幕為主)
要切換可以用Arandr ,用他的GUI寫兩個設置檔:一個是上下並列的配置,一個是左右並列的配置。這暫時可以解決,但還不夠好:因為每次切換要先開Arandr ,然後開啟設置檔,再點執行....需要很多鍵很慢。理論上Arandr 可以配置綁定某一快捷鍵給某一螢幕設置檔,但是0.17 版只支援metacity ,所以我在改成用mutter 的gnome shell 上按了設置的快捷鍵是沒有用的。
所以後來我寫了兩個執行檔,內容分別是
xrandr --output DVI-I-3 --right-of DVI-I-2
xrandr --output DVI-I-3 --above DVI-I-2
然後寫了兩個gnome 的桌面捷徑去分別執行。想知道螢幕的代碼可以用不加任何參數去執行 xrandr  比如說這是我在某電腦的執行結果,可以看到 4 個介面 DVI-I-XXX 只執行了兩個,如何配置就看個人
$ xrandr
DVI-I-0 disconnected (normal left inverted right x axis y axis)
DVI-I-1 disconnected (normal left inverted right x axis y axis)
DVI-I-2 connected primary 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
   1680x1050     59.95*+
   1440x900      74.98    59.89 
   1360x765      60.00 
   1280x1024     75.02    60.02 
   1280x960      60.00 
   1280x720      60.00 
   1152x864      75.00 
   1024x768      75.03    70.07    60.00 
   800x600       75.00    72.19    60.32    56.25 
   640x480       75.00    72.81    59.94 
DVI-I-3 connected 1440x900+1680+0 (normal left inverted right x axis y axis) 408mm x 255mm
   1440x900      59.89*+  74.98 
   1280x1024     75.02    60.02 
   1152x864      75.00 
   1024x768      75.03    70.07    60.00 
   800x600       75.00    72.19    60.32    56.25 
   640x480       75.00    72.81    59.94 

在從睡眠模式醒來後,或是鎖定螢幕一陣子後,有時候會發生螢幕的桌布花屏,偏移或解析度錯誤的情形,一個方式是用alt -F2 去強迫重畫桌面,重新啟動rAndr 也是可以解決
   
一些設置可以去參考
http://www.thinkwiki.org/wiki/Xorg_RandR_1.2

星期六, 4月 22, 2017

把(emacs下的)程式輸出成 pdf 檔

有時候出門不方便帶筆電,但是得用手機或平板看之前寫的程式,能方便的轉PDF 就很重要,因為現在的機子很多不能跑Linux ,看大程式檔這種的事反而變得很麻煩。  

我因為是在Linux下工作,所是用這個方案。https://genomeek.wordpress.com/2013/03/08/emarch-2-create-a-pdf-with-highlighted-code-source/
他會在你原檔案所在的目錄下產生一個XXX.pdf 的檔案,XXX 就是你的原檔名,比如說hello.c 就會產生hello.c.pdf
假如你有文字有做syntext highlight 這些顏色也會保留。預設值我覺得應付一般狀況還好,不過有時候可能會因個人所好想做一些調整,比如說轉成橫式輸出,或是把每頁的檔頭縮到最小,這就得在postsciprt 輸出時調參數,這以後再談。

要是在windows 下但又沒又裝cygwin 就比較麻煩,這篇的作法是靠GhostView,但安裝也算容易
https://www.emacswiki.org/emacs/PostScriptToPDF

星期一, 3月 27, 2017

FreeCAD 裏用尺測量stl 檔

FreeCAD 其實蠻強大的,只是有很多事情除了軟體操作外,是得用上CAD 的知識才能順利完成,所以沒有CAD 知識背景的新手上路很辛苦,比如說明明畫面就有測量尺可用,可是打開stl 檔點半天就是沒有辦法測量。
後來才知道得先把mesh 資料產生相對應的shape ,這樣有點線就可以選兩點做測量。用法是:
主選單-> Part-> Create shape from mesh
這時得等一下讓電腦算,算完原圖會出現一大堆線,這就可以開始用尺測量

星期三, 3月 22, 2017

在Linux 下開發 TI lunchpad


安裝其實不難,最重要的是照這裡 用root 身份把 71-ti-permissions.rules 丟進/etc/udev/rules.d/ 重起udev 服務,插上 lunchpad 如MSP-EXP430G2 就會看到/dev/ttyACM0 ,有些如 MSP-EXP430F5529 還會多一個/dev/ttyACM1 ,不過上傳firmware 的port還是選ttyACM0

然後去 http://energia.nu/ 下載新版,先用root 身份裝到/usr/local
tar Jxvf energia-1.6.10E18-linux64.tar.xz
以一般使用者身份執行/usr/local/energia-1.6.10E18/install.sh
但是他產生的桌面圖示有錯,要用編輯器去修改energia-1.6.10E18
桌面/rduino16.desktop
把這行
Exec=/usr/local/energia-1.6.10E18/arduino
換成
Exec=/usr/local/energia-1.6.10E18/energia
這樣就可以 

(以往TI lanuchpad 在Linux 上有cdc-acm 驅動的問題,但是我在mageia kernel 4.4.50 沒事,應該是後來修好了。)

這個是Arduino IDE 改的,所以介面非常類似。 launchpad 比一般的Ardunio Uno 多了一些硬體,如幾個按鍵跟LED ,其他gpio 的用法也類似 有用過Arduino 的人轉換發展環境應該不難。


星期五, 3月 17, 2017

STM32F103RB 改用 Arduino IDE 開發

這個板子有支援can bus 理論上可以把汽車的OBD II 資料拉出來自己監控,但是手上這片STM Nucleo F103RB 要跑mbed 讓我用的很不順手(哪有人改個程式還要上網的道理?),我前年其實針對這有查過Rroger 的github ,但是當時他只列那種小板子,我就放棄了。但我再看了一下網路資料,現在其實支援的不只這些板子,有個日本人有用Rroger 的程式去處理F103RB :Arduino_STM32を試すArduino_STM32 Nucleo STM32F103RB
,所以有STM32 版的朋友可以試著多搜一下

安裝


基本上照著這邊installation指示:解開 github 上master 的壓縮檔,我把那個解開子目錄改成Arduino_STM32,copy 到你自己 Arduino sketches下的 hardware 子目錄下(沒有就自己建)這個不用放在 Arduino 主程式下hardware 子目錄下,你要放在那也可以。

用root 身份執行 tools/linux/install.sh 去增加udev rulues,最後他會抱怨沒法加dialout 進groups 那是因為原本是用一般使用者sudo 的方式,但一般我們能跑Arduino 時都已經先搞定這一部份了

Udev 設好,插進版子就會看到
/dev/sdc        144K   16K  128K   12% /run/media/你的使用名/NUCLEO
mebed 的flash 看起來超大的,這個來存中文字型啥的應該不錯

比較討厭的是每次他都會警告一下,但是不妨正常運作
Could not find boards.txt in /usr/local/arduino-1.6.12/hardware/Arduino_STM32/examples. Is it pre-1.5?

之前好像有看到有人抱怨這張版子layout 怪怪的,可能要改一些設定,不過我直接跑了blink 的程式上去,啥都沒改就燒入正常,可能是近來一票熱心的發展者把此問題解決了

我這板子是看展覽拿免費的,很大一片。但是網路上價錢不貴而且又小,有能力去網購的可以考慮一下拿這代替Arduino nanoSTM32F103C8T6小系統板 單片機 核心板 STM32開發板 學習板 ARM  ¥9.90 ( 約USD 1.42)

星期六, 2月 11, 2017

在ibook G4 上安裝lubutu 16.04

基本上就跟這一篇在ibook G4 上安裝ubutu mate 15.10 步驟一樣,不過lubutu 16.04 已經把http://ports.ubuntu.com/加進去了,預設軟體管理換成synaptic,省掉很多麻煩


系統基本設定裝完後,第一件事先做套件更新,然後把字形之類的介面設定調一下,安裝hime 中文輸入跟其他個人需要的軟體。老機又可以嚇嚇叫了

在這種10幾年老機上。跑LXDE 速度真的比mate 還快,比起之前的使用經驗好很多。只可惜lubutu 的powerPC 版久久才改版一次,不過對我而言12"螢幕等於隨身帶個大號的平版,感覺比10" 的平版跑被閹割的作業系統來的方便。感覺比較省電:同樣舊電腦,core 2 due 三兩下就沒電了。這個可以撐3 小時。所以不需要大量運算的場合用這還比較方便。

目前遇到問題


sensord 是我在x86 系統上愛用的溫度監視器,但是我照x86 上經驗跑sensord-detect 這一些程式都出不來,所以先放棄
再則面板上氣象溫度我沒有辦法正確搜尋當地地理位置,不過這機子不是工作主力,也就先擱著
之前裝gnome 3-based 發現ibus 會跟hime 衝突。這邊目前還沒看到這樣情況,但是fcix 反而跟系統綁在一起不容易拿掉。就先放著不動他

星期五, 1月 06, 2017

radiotray (或倚賴gstreamer的播放器) 遇到電台網址不能解析的解法


對我們這種長期工作又聽音樂上癮的人,用radiotray 來聽internet 音樂是個不錯的工作方式,假如你在gnome shell 也有裝topcinos,他會躲在那裡不佔太大空間,但是去那裡滑鼠左鍵一按就可以換電台啥的,很方便。我通常是去 www.internet-radio.com 找電台的網址清單

但有些電台網址radiotray就是解析不了沒法播放,我去查了一下,通常這些都是長的像下面這樣末端有個sid=? 什麼的,比如說
http://50.7.99.155:7603/listen.pls?sid=1
其實那不是直接的port ,所以radiotray 底層倚賴的gstreamer 無法解析,解決方法是用你的瀏覽器打開這個gstreamer 無法解析的網址,你就會看到瀏覽器會轉接到這個sid=某某對應到的真實port ,吐出一個真正的play list 而其URL 是
http://50.7.99.155:7603/stream
把這真實port 加到radiotray 或類似的播放器就可以了,這招對Aduacity 之類的也是有效