顯示具有 linux 標籤的文章。 顯示所有文章
顯示具有 linux 標籤的文章。 顯示所有文章

星期五, 5月 25, 2012

中文直書與 Kindle DX

其實我在兩年前寫了關於 Kindle DX 如何閱讀中文小說的 blog,但是其實後來自己對於這樣子的方法不甚滿意,最主要的原因是。

用橫書看金庸感覺很怪 XD

但是我又是個懶人,於是這問題一直放著,一直到現在 iPad 或者是 Android 平板都有出相應的好讀網站閱讀軟體,我自己用 KDX 也是看英文居多,於是這問題就一直一直放著 ... 直到我開始看 "明朝的那些事兒"。剛開始我是用我自己的 ipod touch 看的 ... Orz,其實非常的耗時 (因為我翻了好多好多頁),後來索性再看看現在 KDX 破解的現況,KDX 現今可以看中文的破解,大抵上來說都是換掉內建的字體,比較好的可以做到英文字體是原本 KDX 內建,中文是黑體,也就是說,可以直接看中文的 mobi 檔,但是,它還是橫書 XD。只是那一瞬間覺得不能再懶下去了,所以乖乖來找解決方案。

如果自己不想去 hack KDX 但是又想看直書,最快的方法,把文字複製到 Word 上貼上,然後設定成直書之後輸出成 PDF 應該就解決了 XD 可惜我比較喜歡用 LaTeX ,所以就使用了一個簡單的方法: 在 XeLaTeX 上的 xeCJK package 配合 fontspec package 可以直接把字旋轉 90 度並中文輸出就可以了。最主要關於字型的設定如下


# use fontspect package
\usepackage{fontspec}
  
# use xeCJK package
\usepackage{xeCJK}     

# set CJK main font and rotate
\setCJKmainfont[Vertical=RotatedGlyphs]{Hei TC}

最主要的設定只有最後一行,其他的都是使用所需要的套件,於是乎,剩下的就是讀出內容,加上 header 和 footer 形成 tex 檔,然後 complie 生成 pdf 檔,丟到 Kindle DX 上,收工。


在 Kindle DX 上的效果如下圖,照片中所使用的字體是 "華康明體 Std W5",實際看起來對比照片略粗




為此,我自己寫了一個簡單的好讀網站的 pdb file 轉成 tex file 的小程式,也符上一個簡單的 XeLaTeX template,皆放在 github 上,如果有使用上的問題,歡迎留言或來信。


github: PDB-TeX-Converter


其中有幾點討論如下。

  1. 為什麼生出來的檔案沒有頁碼 ?
    頁碼在 LaTeX 直書排版上一直是一個很大的問題,但是 Kindle DX 本身就有頁碼,所以直接省略。
  2. 為什麼不讀 updb 檔 ?
    我嘗試搞了幾個晚上之後放棄,我對於編碼實在是不了解,如果可以,我會試試看。
  3. 如何使用 XeLaTeX ?
    這個要講要講很久,在 Mac OSX 上是安裝 MacTeX,在 Linux 上是安裝 TeXLive,在 Windows 上 ... 嗯,應該是 TeXLive,但是我沒研究 XD。如果你使用的是 Mac OSX 或者是在 Linux 從 package manager 直接安裝 TeXLive,這隻小程式在運作上應該不會有問題。目前已知在安裝好 MacTeX 2011 的 Mac OSX 上運作可直接生出 pdf 檔。
  4. 如何知道字體的英文名稱?
    首先,先行建立字體列表,在 command line 中輸入fc-cache -f -c -v接下來,在 command line 中輸入fc-list
    即可看到字體的相對應英文名稱,在上面的範例是 Hei TC,這其實就是 Mac OSX 中的 "黑體 TC"。


---
這個應該是很小眾的需求 XD。


2012/06/07 --- 根據 Josh Ko 的建議,還是使用直向直書模式,不過生出來的 pdf 需手動旋轉頁面。示範圖更新如上,代碼更新已上傳至 github 。

2012/08/08 --- 根據 anynomous 的建議,天火藏書排版系統是現有的方案,而我自己也已經建立了一個新專案為 convert2tex ,主要是可以把 epub/ txt/ pdb (限好讀網站格式)轉換成 tex 檔和支援簡體轉繁體。雖然現在已經是 stable,但還在補強中,修好就會上傳並說明關於這個專案。(可能會很久很久 XDXD)

星期三, 5月 02, 2012

在 Mac OSX 下觀看 process 的記憶體使用量

寫這個小程式的目的只是想知道 Chrome 總共吃了多少記憶體而己 ... Orz (我好無聊 XD)

這件事其實很簡單,但是我不太會用 shell,所以仿造 godfat 以前寫的 mem_usb.rb (原 po 提供連結了 XD)(連結找不到了 XD)。寫了一個簡單的 proc_mem.py 程式碼如下



#!/usr/bin/env python
import subprocess
import sys

def main():
    proc_name = sys.argv[1] if len(sys.argv) >=2 else "Google Chrome"
    proc_list = subprocess.check_output(["ps", "-Ao", "rss,comm"])
    print str(sum([int(proc.split()[0]) for proc in proc_list.split('\n') if proc.count(proc_name)>0])/1024.0) + " M"

if __name__ == "__main__":
    main()
使用上很簡單,輸入你想看的 process 名字就可以看到了,如果什麼都不輸入,預設是 "Google Chrome"。

---

我的 Google Chrome 吃了 3.5 gb 啊 ... (遠目)。

星期日, 3月 20, 2011

"time" command in Linux

In Linux, we can use "time" to measure a command's run time easily. If we want to save the time information. you could type /usr/bin/time -o output.txt ls Don't type "time". I guess "time" is a reserve word of shell. it's only useful for GNU version's time.
If you want to use "GNU time" in Mac OSX, you can download "http://ftp.gnu.org/gnu/time/time-1.7.tar.gz" and install. or type brew install gnu-time (If you use homebrew to manage your open source software.)


---
for a simple note.

星期四, 1月 06, 2011

Fedora 13+ Firefox 連不上某些網頁

開工大吉,雖然這稱不上什麼大問題,不過我想還是寫一下。

基本上在確定網路能連的狀況下(不能連請先解決這個問題 XD),有些網頁會無法連線(但是你會發現 Chrome 都可以耶,超神奇 XD),但是你 ping 的到,基本上我只能說,這是他 x 的 Fedora 13+ 以上的設定太先進的問題,我不知道是誰搞的,預設 IPv6 是開的,而且會先問 IPv6 的 DNS,這會造成某些 Hostname 無法被 resolve ,解決之道很簡單,把 IPv6 Service 關掉就對了 XD。方法如下

進入 Firefox 在網址列入輸入

about:config

然後發誓你一定會小心之後 XD,在篩選條件中輸入 ipv6,把 network.dns.disableipv6 設為 true (Fedora 13+ 在這邊預設是 False ... Orz)

如何正確的關閉整個系統的 IPv6,這裡是官方解法,如果懶的看的話,我在我的 blog 上做個備份。找個 terminal 中輸入(中間會需要輸入密碼,請輸入 root 密碼)

su -c 'echo "install ipv6 /bin/true blacklist ipv6" > /etc/modprobe.d/blacklist-ipv6.conf' su -c 'service ip6tables stop && chkconfig ip6tables off'

題外話: 不要再跟我說 ubuntu 很好用了,為什麼不用 ubuntu XD,我知道很好用,我也蠻想用,但是當我賴以維生的 EDA Tool 只能在 Fedora/ CentOS 上跑的時候(ubuntu 不是不能跑,而是 CIC 沒這個版本,不要要求太多 XD),我是還蠻難換成 ubuntu 的 XD


---
聽說沒有調整之前連 FB 都不能連 XD。

星期六, 9月 11, 2010

Synopsys Design Compiler Primer

這篇只是單純做個紀錄。最主要還是要感謝 ycma 寫了一個 sample script,我只是從中學習到一些事 XD。

其帢從 shell 底下打 design_vesion 就可以進入 GUI 畫面,但是每次進去都有重覆要設定的,而且重覆修改程式之後每次都用 design_version 的話並不是一個好動作,而 design compiler 提供一個 dc_shell,Synopsys 公司用的都是 tcl script,所以如果會撰寫的話會可以省下相當多的重覆性工作。

那麼寫 dc_shell command 會很困難嗎 ? 其實不會,design_version 打開後執行相對應的動作,都可以看到相對應的指令顯示在最下方,照抄就可以了。根據這個簡單有效的方法(還有記得參考本身的 doc),很快就可以寫出如下的 script


set COMPILEFILE {decoder.v reg.v reg_entry.v}
set MAINMODULE "RegisterFile"

set search_path {., /cad/celllib/CBDK90_UMC_Faraday/CIC/SynopsysDC/db}
set target_library {fsd0a_a_generic_core_bc.db}
set symbol_library {fsd0a_a_generic_core_bc.sdb}
set link_path {fsd0a_a_generic_core_bc.db}
read_file -format verilog $COMPILEFILE
current_design $MAINMODULE
create_clock -name "clk" -period 10 -waveform { 0 5 }  { clk }
compile -exact_map

report_timing
report_area

exit

其實 tcl 蠻好懂也蠻難用的 (汗),這個 script 也算的上是一目了然,大抵上來說讀入三個 Verilog File ,指定主要 Module 為何,指定 clock 訊號線,然後 Compiler 接著報告出 slack time 與晶片使用面積為何。

如果想要知道指令更多的 option,可以在 dc_shell 使用 man ,如果我今天想要知道的 report_area 的話,那麼會出現如下畫面

dc_shell> man report_area
2.  Synopsys Commands                                        Command Reference
                                  report_area

NAME
       report_area
              Displays area information for the current design or instance.
...

可能有需要我才會去查更多的細節吧,暫時先這樣子做個非常粗略的筆記嘍 XD


---
這篇是寫給自己看的,不然品質實在是不怎麼樣 XD

星期日, 8月 01, 2010

更新恐懼症

有一句古老的工程諺語是這樣子說的 ...

如果一個系統沒有壞,那麼就別動它。

對於一般使用電腦的人而言,其實軟體更新一點都不重要 XD。電腦能動就好了,為什麼要更新 ? 這是一般使用者最常見的疑問,而就另外一個層面而言,一般的使用者也不太在乎自己的個人資料是否會外洩(如果有玩線上遊戲可能會比較在乎一些 XD)。那麼到底是為了什麼軟體要有更新呢 ?

這對於沒有寫程式的人而言,到底為什麼要有軟體更新呢 ? 軟體在那邊好好的啊,於是我們會看到有兩種恐嚇方式,一種是,如果你的電腦不更新就會資料外洩啦,駭客攻擊啦 (老實說我還蠻想知道駭客攻擊是什麼 XD),一種是,你不能更新啦,一更新軟體的破解就全沒啦,很麻煩之類的有的沒有的 (這個濫觴我想是從 WGA 和 KAV 開始吧 XD),於是對於更新有所知道的人,要嘛死都不更新,要嘛死都一直更新 XD,不然就是完全不知道有這一回事的存在(這不是電腦自己該處理的部分嗎 XD)。

那麼對於對更新這件事已經有相當了解的人而言,更新其實還是一門苦差事,在 Windows 和 Mac OSX 上,更新其實沒啥大問題,Windows 除了更新時盜版和正版的攻防戰 (這幾年蠻常聽到一更新就變盜版 XD),其實還 ok,Mac OSX 常常會遇到一些神奇的東西(鍵盤韌體更新程式,我第一次看到實在是嚇了一跳),所以會更新的人,大部分都還蠻勤於更新的。會爆炸的機率很低,我是有分別在這兩個系統上一更新後重開機就再起不能的狀況,不過這麼多年來,這兩個系統是分別只有一次而己。不過我勤於更新是從 Windows 的 Blaster 病毒讓我三天睡不了覺之後開始的 (那又是另外一個故事了 ...) XDXD。

那麼在 Linux 上呢 ? 我從頭到尾都不認為 Linux 是給一般使用者用的 XD,每次光看更新列表我就頭皮發麻 (我承認我是在去年才知道 libxxx 和 libxxx-dev 的差別 XD),每次一按 sudo yum update/ sudo apt-get upgrade 然後就看到一堆有如火星文的套件跑出來 XD,這對一般使用者實在是不怎麼友善 XD,其實一般狀況下,我還蠻敢更新的,但是看到一些關鍵性的套件名稱,我也很懷疑我要不要更新 XD 常常會有更新完開不了機,不然就是顯卡再起不能,音效跟你說掰掰的狀況(千錯萬錯,都是驅動程式的錯 XD),真的有如我一開始引述的那一句工程諺語。

更新不見得會你覺得生活更美好,有時候是更糟 XD,這句話在 Linux 上更是重要。

那麼到底要怎麼處理更新這件事 ? 我目前的做法是,在所有平台上還是不要命的更新,炸了我就試著去解決 (在這一行混,總是得自己試著想辦法 XD,這時候我就會常常看 Bugzilla & mailing-list XD),ycma 的作法是,在 Linux 上調到穩定了就不更新,如果真的有必要要更新,一個一個套件慢慢試 (我這個懶人一定做不到 ...),其他人的作法我不知道,知道的人可以告訴我一下嗎 XD。

原本以為自己可以寫的很科普的,結果現在看起來還是一點也不啊 XD。


---
寫開心的嗎 XD

星期六, 8月 22, 2009

Mac OSX Terminal 256 color

這篇基本上是參考 yzlin 的 The Tips of Setting Workstation Environment如果是 linux or FreeBSD ,用這份簡報就很足夠哩!
不想這麼快進入正題,為什麼要用出一個 256 color terminal? 我想很大部分的原因是為了舒適度,原本的 8 色或 16 色的功能大部分像是拿來 mark 說,這個字和其他字不太一樣,至少就我看起來,原本的 8 色或 16 色看起來並不是這麼舒服,而用 256 色的時候(我在 Windows 95 就是用 256 色耶 XD),我們有比較多的選擇可以讓自己的眼睛舒服些,那怕給一個 keyword 標定為藍色,也是有差別的

在 Mac OSX 底下要用 256 color terminal 的話,請愛用 iTerm, iTerm 原生支援 256 color ,但是開下去你會感受不到任何差異 XD,不過在這邊我想說一下,iTerm 的半透明效果不要開,開了會非常的 lag,不知道是 bug 還是程式本身的問題,之後在 .bash_profile 加入

export TERM=xterm-256color
重新登入後,還是看不到任何差異,當你打 ls 的時候,ls color 已經寫死了,通常做到這邊,在 linux 底下已經看的到 ls 不太一樣了 XD,所以我們要測試的是 grep ,這個時候,我們對某個檔案做 grep --color include xxx.c就會看到

terminal 基本設定到這邊完成了
VIM
VIM 原生支援 256 color,所以只要環境支援 256 色,再找到一個 256 色的 color 的 scheme 就可以動工了(推薦 yzlin 寫的 yzlin256.vim) 把抓好的 color scheme 放入 ~/.vim/colors/ 底下,然後在 ~/.vimrc 中設定
set syntax=enable
set t_Co=256
color yzlin256
全數搞定,不過詳細的顏色設定可能還要研究一下,在 VIM 出來的成果大概如同下圖

GNU Screen
2011/09/20: 在這個時間點,已經不用自行編譯 screen,安裝 homebrew-alt 之後再行安裝 screen (輸入 brew install [homebre-alt_dic/duplicate]/screen.rb) 即可。
Mac OSX 有原生編譯好的 screen,不過很可惜的就是 256 color syntax 並沒有開啟,如果原生支援的話,在 ~/.screenrc 中寫入
#terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"
attrcolor i "+b"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
termcapinfo xterm-color "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
不過由於原生不支援,所以我們得去GNU Screen抓回來自己編譯,而編譯的選項為(參考這裡)
./configure --enable-locale --enable-telnet --enable-colors256 --enable-rxvt_osc
然後當編譯雖有一堆警告(因為 Mac OSX 用的是 utmpx.h 而非 utmp.h) 的時候很快就發現了錯誤 XD
pty.c:38:26: error: sys/stropts.h: No such file or directory
這時候開啟這個檔案一看,我們看到的是 ...
/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
#ifdef HAVE_SVR4_PTYS
# include <sys/stropts.h>
#endif
我們用的應該不是 solaris ,所以移掉這幾行,編譯就可以完成了,之後執行我們自行編譯的 screen,我們應該能看到 ..(下圖的測試檔在此可以下載)

到此,iterm, vim, gnu screen 都有 256 色啦 !
如果有常看 man page 的需求,可以將下列設定寫入 ~/.bash_profile 中

# colorful man page
export PAGER="`which less` -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[38;5;167m'
export LESS_TERMCAP_md=$'\E[38;5;39m'
export LESS_TERMCAP_me=$'\E[38;5;231m'
export LESS_TERMCAP_se=$'\E[38;5;231m'
export LESS_TERMCAP_so=$'\E[38;5;167m'
export LESS_TERMCAP_ue=$'\E[38;5;231m'
export LESS_TERMCAP_us=$'\E[38;5;167m'
而 man page 就有類似這樣子的效果出現,當然顏色可以自己慢慢調 XD

---
enjoy the environment. XD

星期二, 8月 11, 2009

vim on Mac OSX

在我寫 vim 的 blog 時,我覺得我在 VIM 上裝了太多東西(其實也沒多少啦),但是同樣的設定在 Cent OS 5.3 上卻跑的很順,觀察了一下 Cent OS 5.3 compile vim 的 option 是 -O2,而在 Apple gcc 上是 -O ,我就自己抓了 source code 自行重新編譯然後安裝,果然在 Mac OSX 上也可以跑的很順了 XD。

command 如下:

./configure --enable-gui=no --with-x=no --enable-multibyte
make CC=gcc-4.2 CFLAGS=-O2

其實這只是一個範例,我不想裝 gvim (其實也裝不起來),也不想開一個 vim 就要開一個 x11,我試過 O3 ,不過反而比較慢,所以就可以試試這樣子的編譯選項

若在使用 vim 時,backspace 失效,在 ~/.vimrc 加上

set backspace=indent,eol,start

即可解決。


---
別人在編 Firefox,我在編 vim XD


如果有用 MacPorts 安裝 gcc4.4(要裝很久),也可以試試這樣子的指令
make CC=/opt/local/bin/gcc-mp-4.4 CFLAGS=-O2

星期一, 3月 23, 2009

「淺談排版系統 Typesetting System」簡報釋出

廢話不多說,連結在此
簡報 (pdf)
Handout (pdf)
若有問題,歡迎指教指正,至於.tex 的 source code 暫不釋出(因為寫的很難看XD),如果有需要可私下來信索取XD 希望能對排版有基本的認識。


---
禮拜三要講第一次,不知道會怎麼樣XD

星期四, 8月 28, 2008

Fink Project

Fink Project 是一個可以讓你以套件管理形式來管理OpenSource的安裝套件,整個安裝說明在此在dkg解壓縮之後,安裝完,記得把"FinkComander" 移入應用程式中,會有一個非常像ubuntu的套件管理程式(其實安裝指令也有部分雷同,估計兩者有血緣關係XD),可以試試,比起MacPorts而言,有更多選擇。

---
學習。

星期五, 4月 18, 2008

utmpx

在大部分的linux下,是可以從"/var/run/utmp" 這個路徑得知現在使用這台伺服器的使用者資訊,資訊是開放任何人可讀,不過在Mac OS 10.5以後不支援這個檔案,而改採用NetBSD的utmpx,故資訊可從"/var/run/utmpx"這個檔案讀到。寫了一小段測試碼如下

#include <stdio.h>
#include <utmpx.h>
int main(){
struct utmpx utmpx_entry;
FILE* fp = fopen("/var/run/utmpx", "r");
while(fread(&utmpx_entry, sizeof(struct utmpx), 1, fp)>0){
printf("%s\t%s\t%s\n", utmpx_entry.ut_user, utmpx_entry.ut_id, utmpx_entry.ut_line);
}
return 0;
}

事實上我覺得使用起來沒什麼差別,不過細細比較utmp.h和utmpx.h之後,會發現struct utmpx記載了更多資訊,可能更符合現在的作業系統設計,畢竟現在的作業系統不是只有單純的command line了,而一個xwindow也是一個terminal,所以我覺得新增這些資訊還算蠻合理的。

---
事實上這篇重要性不大XD

星期日, 3月 09, 2008

有感

看著efang玩ubuntu linux,我決定,我還是玩....FreeBSD好了,我不要沒事每天都要搞Kernel和library不一樣時的痛苦,而且Mac OSX也是BSD Kernel,一個名叫Darwin的Kernel,查了資料才發現原來Apple有釋出source code。不過FreeBSD的相對中文資料也是比較少,沒關係,看英文也不錯,最近感覺到自己的英文退步到一個鳥程度XD。

多多吸收新東西總是好的。

---
雖然這很花時間XD