OpenOffice/LibreOffice Calc Macros(2)

為了想用內建的 BASIC 語法來抓網站內容,找了好一陣子,找到 OpenOffice 文件正體中文化網站OOo中文手冊網站 也利用Google爬了一些文,然後也看了 LibreOffice 的輔助說明,發現似乎沒有很方便的函數來做這件事情。

然後,又回頭試了 Python,這次是在 Windows 上試,要寫 script 的話,要把 script 放在 %USERPROFILE%\Application Data\LibreOffice\3\user\Scripts\python 下,這樣就可以執行了。當使用 [工具][巨集][執行巨集] 打開「巨集選擇器」以後,就可以在對話盒左邊的「我的巨集」項目裡找到你程式裡的函式,然後就可以選擇要執行哪一個了。

[python]
def main():
# 取得當前文件
doc = XSCRIPTCONTEXT.getDocument()
# 取得第一張工作表
sheet = doc.Sheets.getByIndex(0)

# 填字串,一般字串跟 unicode 字串都可以
sheet.getCellRangeByName(“A4”).String = sys.version
sheet.getCellRangeByName(“A5”).String = “Hello World”
sheet.getCellRangeByName(“A6″).String = u”Hello world2”
[/python]

使用 python 的話,要抓檔案或是要做什麼複雜處理的,就很方便了,需要什麼函式庫,就自己裝上去就行。但是缺點就是失去了部分的可攜性,在沒有 python 的環境下,無法執行。

OpenOffice/LibreOffice Calc Macros(1)

以下都在 Ubuntu 下進行。

目標是想做股市資料的蒐集跟分析。

首先想到,看可不可以做到像 Excel 一樣做 Web 查詢,Calc 的確有類似功能,Insert > Link to External Data 就是,輸入網址以後,速度相當慢,首先會問你語系,選 Automatic,然後過一段時間以後,會把該網頁裡的所有 table tag 都列出來,有 id 屬性的會顯示 id,沒有的,會用流水號代替,所以你不知道要匯入哪一個 table。Excel 在這裡會顯示一個預覽的視窗,並且將可以匯入的部份框起來,左上角有小圖示,按了以後就可以匯入,相較之下,Calc 一整個弱掉。

那就只能寫 Scripts 了,我花了一個小時在找 macro 存放的位置,大概是我裝過太多版本,所以家目錄下有 .openoffice 跟 .libreoffice 這兩個目錄,可是我存了 macro,這兩個目錄下都沒有,LibreOffice 的 wiki 上說是在 .libreoffice 下,我找了又找,就是沒有。本有想用 find 找,可是我家目錄下好多東西,想說不要花那個時間,但最後我還是用了。就目前 LibreOffice 3.5.1 來說,位置是放在 .config/libreoffice/3/user/basic 下。

我發現這方面的入門文相當相當的混亂而且少,目前看到還是 Wiki 上較多…

 

Canon BJC-240+cups+SAMBA+CentOS

Canon BJC-240 以Parallel 轉 USB 接到電腦上,接上以後是在/dev/usb/lp0。

先設置一下跟cups相關的部份,你要先確定自己在sys群組裡,因為cups會需要權限來寫入設定檔。

cups,我是以web介面去安裝印表機,打開瀏覽器,在網址列輸入localhost:631,然後選新增印表機,首先會要求你輸入名稱以及描述,名稱裡不可以有空白。下一步之後,會要你選介面,這時候就選有偵測到的USB介面。接著會要選驅動程式,我試過raw了,不行,我改用了generic postscript。接著會要你選queue的部份,只有一個可以讓你選,就選吧。至此,cups會要你輸入帳號跟密碼,請輸入你的帳號跟密碼即可。

接著是SAMBA。SAMBA的部份比較簡單,打開 /etc/samba/smb.conf,確定 printcap name = /etc/printcap 、 printing = cups,然後將 [printers] 下的 guest ok、writable、public、use client driver 都設為 yes 即可,如果沒看到就自己補上。接著重新啟動SAMBA。

至此,Windows就可以連上,並且去新增印表機了。

p.s. 這邊不多贅述SAMBA的權限控管,就看是用user或share或其他什麼的,總之要有權限可以存取server就是了。

 

UEFI secure boot impact on Linux閱讀小記

文章:Red Hat, The Linux Foundation and Canonical Publish White Paper on Unified Extensible Firmware Interface的最後有個連結,點選以後可以下載一份PDF文件,標題是UEFI secure boot impact on Linux。文件的前面很仔細的分析了UEFI的種種好處跟壞處,然後分析了對Linux的影響。我有大略看過一遍,最主要的問題都是在於key,UEFI開機時會拿key去驗證bootloader,如果驗證失敗,就不再繼續開機。可是對Linux來說,不可能針對每個OEM製造的機器去簽署bootloader啊,因為這樣會要做很多份bootloader,太麻煩。如果要改那個key的話,又沒辦法。中間後段的時候還有提到一些有的沒的,我偷懶跳過去了,直接看最後的結論。最後就提出幾點建議:

  • 建議OEM可以提供很方便可以開關secure boot的介面
  • 建議OEM(在BIOS廠商的協助下)可以在系統軔體裡提供標準機制去設置key
  • 建議以setup模式賣出,讓作業系統去負責安裝初始key的動作

CentOS 5裝Python 2.6

先確定有EPEL,然後:
$sudo yum install python26
再裝 python26-virtualenv python-pip:
$yum install python26-virtualenv python-pip
製作環境:
$mkdir -p python-envs
$cd python-envs
$virtualenv-2.6 –no-site-packages –distribute myenv
$pip-python install -E myenv yolk
啟用:
$source myenv/bin/activate
$yolk -l

根據changelog取版號

以前上傳ppa之前,都是手動打指令,其實應該要自動化才對,今天跨出第一步。第一步當然就是取版號,deb的版號是從debian/changelog來的,所以要從這裡著手。

當前的版號只會在第1行,一開始就想到用 head -n 1來取,用 awk 印出第2欄。可是第2欄前後有 () 呢?該怎麼拿掉呢?不會是要用 sed 吧? 去 GNU awk manual 翻閱了一會,發現有 match 函數,可以用 re 來取 group,所以用 match($2, /\((.*)\)/,arr); 就可以去掉 ()。

去掉 () 之後,想到應該可以把 head 省掉,也用 awk 處理。NR 是一個特殊的變數,當處理一筆(行)時,這個值就會累加。把它限定為 1,就表示只處理第1行了。於是就可以湊出這麼一段script。

CHANGE=`awk 'NR==1 {match($2, /\((.*)\)/,arr);printf("gcin_%s_source.changes", arr[1]);}' debian/changelog`
ls -l $CHANGE

cpio的pass through

以前沒想過 cpio 的 pass through 可以做什麼,今天要不是有朋友問我,我大概也不會想到這個。是這樣子的,假定有個目錄 a,裏面有很多目錄跟檔案,可是只要複製 a/b/c/file.txt 跟 a/b/file2.txt 到目錄 t 下,可是沒辦法用 cp -r,因為 cp -r 會把整個 a 都複製過去,總不能先複製過去以後再一個一個刪除吧? 本想說這可能要寫 script 來做了,打了 cp,按了 tab,看有沒有什麼可能的指令可用,就看到 cpio,印象中,cpio 可能是可以。

最初的想法是用兩個 cpio 來做,一個建 archive(cpio -o),一個解到指定的目錄(cpio -i),這樣就行了。用 info cpio 一查,發現 cpio -p 應該就可以做了。

所以試了一下,這裡先建立一個 list 檔案,裏面有兩行:a/b/c/file.txt 跟 a/b/file2.txt,a 目錄下有很多目錄跟檔案,並且有 a/b/c/file.txt 跟 a/b/file2.txt。那麼這兩行指令就可以只把list裡指定的兩個檔案複製到 t 目錄下,並且建立必要的目錄:

mkdir -p t
cat list | cpio -p --make-directories t

sis162u與ndiswrapper

原本以為linux的硬體相容性很高,至少好幾年前買的Asus USB無線網卡應該是要可以用的,結果,並不是我想的。不支援,就是不支援。
還好知道這支無線網卡的晶片是SiS162U,就上網Google了一下,發現大家都是用ndiswrapper來裝上Windows的驅動程式,然後讓它運作。
我裝的是ndisgtk這個GUI程式,安裝以後,執行ndisgtk,然後安裝sis162的windows驅動程式,就…大功告成了嗎?
不是,因為我用的sis162 windows驅動程式不知道有問題還是太舊,查了好久,後來我是去SiS官方網站抓了最新的105版的驅動程式下來裝,就沒問題了!!
所以碰到只有Windows驅動程式而Linux不支援的時候,可以用ndiswrapper + ndisgtk 試試看,也許就起死回生。

讀Debian新維護人員手冊

Debian新維護人員手冊記下的:

  • 比較版本:dpkg –compare-versions ver1 op ver2
  • 添加環境變數到 .bashrc 以供識別:
    DEBEMAIL=your.email.address@example.org
    DEBFULLNAME="Firstname Lastname"
  • dh_make 可以快速的從一個 tarball 產生出 tarball 副本跟 debian 目錄,如:dh_make -f ../gentoo-0.9.12.tar.gz
  • control裡的內容,如分類、權重…等可參考 Debian Policy Manual
  • 可以用 dpkg-depcheck -d ./configure去檢查相依性,或者用 objdump -p foo | grep NEEDED 去看用了哪些 library
  • changelog 可以參考Debian Policy Manual, 4.4,是主要定版號的地方。
  • rules 可以用 fakeroot debian/rules target 來執行裏面的特定 target
  • 可以用 debuild 來自動化,在 .devscripts 裡添加
    • DEBSIGN_KEYID=”keyID”
    • DEBUILD_LINTIAN=yes
    • DEBUILD_LINTIAN_OPTS=”-i -I –show-overrides”

    ,然後 debuild -sa、debuild clean

  • 檢查套件:
    • debi xxxx_i386.changes
    • lintian -i -I –show-overrides xxx_i386.changes

Run MiPony on Linux(wine)

因為看到MiPony可以快速下載freakshare.net的檔案,所以就想裝來試試看~
在Linux下,只能用wine,我用的版本是1.3。你得先安裝winetricks(sudo apt-get install winetricks),然後用winetricks裝上 gdiplus, fontfix, dotnet20, ie6(winetricks gdiplus fontfix dotnet20 ie6)。接著再用wine裝上MiPony,就可以了。
目前下載了十幾個檔案,都沒問題,真是太好了!!