Planet Linux of Taiwan

07月03日

jserv's face
jserv


縮小 展開

演講:探索嵌入式 ARM 平台與 SoC

七月份,小弟將應 [Study-Area] 之邀,給予一場新的教育訓練,主題為「探索嵌入式 ARM 平台與 SoC 」,嘗試實現過去的一個小心願:以淺顯又直觀的方式,去探討 ARM micro-architecture,以下是該議程相關資訊: 議程簡介:雖然 ARM 嵌入式平台早已充斥於我們的日常生活,舉凡手機、導航系統等電子產品,但探討其原理架構的課程,往往有如英文諺語 "an arm and a leg" 背後的意思一般,所費不貲。講者嘗試整理過去幾年開發的心得,以心得分享的方式,免費介紹 ARM 硬體特性與原理,並以一個具體而微的 RTOS 開發,作為探索架構與軟體驗證的對象。 建議聽者背景: (任一) 已熟悉 C 語言程式設計,並參與過 ARM 平台軟體移植者 對 ARM/RISC 架構開發有興趣者 覺得只要有心,什麼都不是問題的熱血人士 預定提綱: ARM7/ARM9/ARM11 硬體架構快速瀏覽 ARM SoC 平台 關鍵概念:...

07月02日

PCMan 的 Blog's face
PCMan 的 Blog


縮小 展開

[紀念] 生平第一次收到病人來函感謝...

上班即將滿一年了,今天還是第一次收到病人來函感謝 :)
而且還把住院醫師小弟我列在感謝名單的第一位
我說雖然這病人還只是個孩子,但這孩子還真上道... XD

雖然說上面還有塗改過的錯字,還畫了海綿寶寶跟派大星
不過十出頭歲,能有這份心意我覺得很感動了。
本來我們內科應該不會收到這麼小的病人的,要不是他的症狀太奇怪
應該是要去小兒科才對的吧?

這份感謝函,最讓我印象深刻的是,他住了兩次院,待過兩個病房
他把所有曾經照顧過他的大小全體醫護人員,整個工作團隊都列了上去
不像有些病人,永遠...

瘋狂帽客's Blog's face
瘋狂帽客's Blog


縮小 展開

Compress and encrypt directory in Linux

直接進入實作步驟~
Compress tools: tar
Data encrypt tools: AES Crypt (http://www.aescrypt.com/)

Objective-1, To backup /etc and encrypt it:
1. 壓縮並加密/etc:
# tar cvf - /etc | aescrypt -e -p 123456 -> etc.tar.aes
(-e: encrypt, -p password)

2. 測試etc.tar.aes是否有加密:
[root@localhost ~]# file etc.tar.aes
etc.tar.aes: data
[root@localhost ~]# tar tvf etc.tar.aes
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Read 300 bytes from etc.tar.aes
tar: Error exit delayed from previous errors
測試結果發現到etc.tar.aes已經被AES加密了,故無法直接以tar觀看壓縮檔的內容。

Objective-2 To decrypt and uncompress data:
1. 將壓縮檔解密:
# aescrypt -d -p 123456 etc.tgz.aes 
解密後會新增一檔案為etc.tar
2. 解壓縮:
# tar xvf etc.tar
如此一來便可解開加密過後的壓縮檔了。

其它在Linux上常見的加密工具還有openssl與gpg。

Suse寂客's face
Suse寂客


縮小 展開

Firefox 3.5更新

Firefox3.5版釋出,效能一整個提昇,記憶體配置吃的也比3.0版來的少一點,切換分頁也有比較順暢。也改進了3.0版經常當掉的bug。有在用的人一定要更新。OpenSUSE 11.1:OpenSUSE 11.0:ps.這次改用meta package.

dbtsai's face
dbtsai


縮小 展開

阿宅的成長日記 ~ 第一屆全國DIY精算組裝王大賽

高二這年,為了要追網研社社長 (是可愛的小正妹,我可沒斷袖之癖),我努力獲得她的認可,當了她的助手,成為副社長。阿宅如我以為,只要把電腦學好,可以幫她搞好社務,加上她和前男友 – 前網研社社長分手,我就可以近水樓台,進而得月。為了補充知識,每天睡醒第一件事情就是上當時最夯的超頻者天堂,看別人怎樣可以有效率的冷卻 CPU, 可以把時脈推進。對於當時還是窮學生買不起高檔硬體的我,這是多麼迷人阿!那時候週末的娛樂是到建國商場(高雄最大的電腦商場)窩著,不管是看電腦書也好,和正妹店員打屁聊天也好,日子是很愜意的。或許當時就註定我未來要當阿宅到老了…XD 記得那時候網購還不怎樣盛行,為了買銅水冷器,還從高雄搭著統聯到台北光華商場(台北最大的電腦商場)購買,稍微逛一下台北後,就直接搭車回家了。

那時候網路上很少有中文的技術資訊,當時我英文也還不怎樣好,為了深入了解電腦運作原理,PCDIY! 月刊就成為每個月必須要做的功課。當時他們在北科大辦一場精算組裝王大賽,規則是獲選進入台北決賽的人,每一組兩個人共給予兩萬塊現金,其中一個人留在現場搶答知識性問題,結果計入總分內。另外一個人拿著錢,到光華商場直接採購電腦組件,看誰可以在最低的預算組到最快的電腦。總分概括數個部分;(1) 拿到經費後,從採買到回來現場的時間 – 全程採買都是用跑的,抱著戰果跑回北科,真累人阿!(2) 組裝電腦的速度和正確度 (3) 用 3Dmark benchmark 後的電腦效能 (4) 組裝所花費的錢 (5) 理論組答題正確率等等。

當時隔壁班阿宅同好林家戊找我一起組隊參加,網路初賽後,我們被選入 10 組的至尊組合內,挑戰台北科大現場的實地決賽。為了增加搬運貨品效率,提早回到現場,我還自備了一個超大行李袋。隔壁組看到,還問我說多少錢要賣…笑…我是負責採買的人,小阿宅體力果然不佳,整天都不運動,或許最大的運動就是看那百分百貼圖區赤裸的擁抱圖吧!比賽跑步搬電腦輸很大,喘的跟牛一般但不牛逼阿!不過下一階段用纖纖巧手組裝電腦,比拼速度,這哪會難倒我?平時五指姑娘可不是訓練假的。按著節奏,很流利的將各個裝置就位,那剎那間,怎主機板風雲變色?我可不記得我買的是血紅 PCB. 細看,那纖玉的手指在噴血,隱約見骨。主辦單位招來救護車,第一次坐上,也蠻鮮的。到馬偕醫院急診手術後,回到比賽現場,發現莫名其妙得第二名…XD. 原來我搭上救護車時,我組員剛好理論題比賽完,接手我的工作。得獎心得錄影,我強調不要買沒有摺邊的機殼,不然下場就是我手那樣。結果被 cut 掉了,大概怕得罪廠商。得獎勝利品是組裝的電腦加上 17 吋 CRT 螢幕。後來我把電腦賣給班上另外一個同學,隔年幫他裝新硬碟時,還看到血漬。

Anyway, 以下不只是有圖有真相吶!這可是有錄影存證的!阿宅修電腦到全國第二名,奠定以後大學應付各種學妹的基礎。百百種學妹,我可不想握著屠龍刀嘯成之鋒氣到處屠龍,只好發揮快速組裝維修的技巧來瀟灑地帶過。遇到遙迢淑女,這這這…更可以嘴砲有多會修電腦,在那閨房先幫其電腦健檢一番,再細細的指導電腦的精要。所謂預防勝於治療。無奈何事於願違,常常是在那修電腦時,學妹與其男友嘿呀老地嘿的聊手機,只能對著螢幕發呆,換來一句學長好厲害。

好像離題了,嗯!這些種種,終於獲得正妹社長認同,願意當我的好朋友。畢業旅行和她一起走遍那六福村,晚上…我和她一起玩牌。她會塔羅牌,我和她說,我有喜歡的人,不敢告白!她幫我一算,說鐵定把得到阿,你那們帥!隔天用 BBS 告白了,換來 – 對不起,你是好人 (ps, ㄟ,女主角是我,塔羅牌算自己不準啦!)。第一次了解事實,心被撕裂。阿宅都馬不屈不饒,好人當到底,在多少個夜裡,一個人忍受那錐心刺骨的言語疼痛 – 你是好人,可以幫我修電腦嗎?

經過二十幾個年頭,終於了解,男子漢不是那帶著 PSP 在捷運上打著,用 SONY VAIO 在飛機上看藍光影片,用那千百個宅宅的才華來吸引女生的傾慕。男子漢帥氣中出才是王道!

&

jserv's face
jserv


縮小 展開

COSCUP 2009 即將到來

一年一度的 [COSCUP / 開源人年會] 即將於八月 15 與 16 兩日舉辦,在台灣各地社群共同舉辦之下,逐漸成長茁壯。今年大會有四個主題: Android 和嵌入式系統 雲端運算和 Web 技術 開發者工具 使用者桌面 據聞,因為講題投稿相當踴躍,主辦單位仍在思量,想必也如過往一般精彩可期。本次 [0xlab] 很榮幸能成為 COSCUP 贊助單位,並分享若干議程,涵蓋 Android 3D、Embedded 開發,與 Linux virtualization 等等。期待您的蒞臨指教,謝謝!...

KDE 4.3.0 rc1 釋出!

預計在七月底釋出的 KDE 4.3.0,於七月一日釋出了 rc1 版本。KDE 4.3 在 Plasma 外觀主題美工上改變了不少,此外據說修正了許多記憶體管理方面的問題。目前 rc1 版本僅供測試用,不建議一般使用者下載使用。

這裡是 KDE 4.3.0 rc1 的釋出宣告

Just in Time's face
Just in Time


縮小 展開

透過 GNU Emacs 將 source code 轉成 HTML

有在寫部落或是做網頁的人可能多少都會碰過要將原始碼貼上網頁的清況,不過光是貼上原始碼這一大堆文字確實會讓人讀起來很吃力,現在一般人在看原始碼可能都已經習慣了各種編輯程式所提供的 syntax highlighting 語法標注的功能。可惜這些功能通常只能在本機上使用,一般網頁不太會提供這種功能。還好,網路上有已經有很多人提供解決的方法,有些人是用 client 端的 JavaScript (CSJS) 來實作,而有些人是透過 server 端PHP 來實作 syntax highlighting 語法標注功能。

此外還有另一種方式,就是先將程式或原始碼先透過網路上的服務或是本機的工具程式先轉成 HTML,然後再把 HTML 貼到網路上。這種方法雖然沒有 JavaScript 或 PHP 便捷,但是有些網站基於管理或是安全上的理由,並不允許執行使用者的 JavaScript,有時甚至連 CSS 都無法修改,而 PHP 通常則需要有 server 的管理權限,所以這個方法自然有它的優點。因為 Emacs 是我寫程式慣用的編輯器,它不但對許多原始碼都提供 syntax highlighting 的功能,此外自動縮排的功能也非常好用,所以也使我想開始尋找 Emacs 是否也具有某種機制可以將 buffer 中 highlight 過的文字轉成 HTML,如此轉好後就可以直接貼到網路上去了。然而經過一番摸索後似乎沒有發現這樣的功能,但是我並沒有因此而放棄,因為 Emacs 還有內建的 script 語言叫做 Emacs Lisp (或 Elisp) 是個很 powerful 的工具,可以透過它來存取編輯器內部的物件以及執行一些程式化的動作。稍微思考一下並嘗試一些 function 做點小試驗,發現要寫這樣一個程式並不會很難,buffer 中的原始碼 Emacs 都已經幫你 highlight 好了,所以只要將文字的屬性抓出來再根據這些資訊在文字加上對應的 HTML markup 就行了。下面這段程式就是今天努力的結果,程式很簡單不到 200 行 (這個 highlight 過的程式碼也是用該程式本身轉出來的):

下載 faced-buf2htm.el

;;; faced-buf2htm.el --- convert buffer text with face properties into HTML
;; Copyright (c) 2009 Justin Lee

;; Author: Justin Lee <cf9404@yahoo.com.tw>
;; Created: 24 May 2009
;; Version: 1.0
;; Keywords:

;; This is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be
;; useful, but WITHOUT ANY WARRANTY; without even the implied
;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
;; PURPOSE.  See the GNU General Public License for more details.

;; You should have received a copy of the GNU General Public
;; License along with this program; if not, write to the Free
;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
;; MA 02111-1307 USA

;;; Commentary:

(defvar g-r-dat)
(defvar g-g-dat)
(defvar g-b-dat)

(defun get-cdat (cv0 cv1)
  (cons cv0 (- cv1 cv0)))

(defun cv2htmcv (cv cdat)
  (/ (* 255 (- cv (car cdat)))
     (cdr cdat)))

(defun cvs2htmcvs (cvs)
  (format "#%02x%02x%02x"
          (cv2htmcv (nth 0 cvs) g-r-dat)
          (cv2htmcv (nth 1 cvs) g-g-dat)
          (cv2htmcv (nth 2 cvs) g-b-dat)))

(defun faced-buf2htm-init ()
  (let (a-v1 a-v2)
    (setq a-v1 (color-values "black"))
    (setq a-v2 (color-values "white"))
    (setq g-r-dat (get-cdat (nth 0 a-v1) (nth 0 a-v2)))
    (setq g-g-dat (get-cdat (nth 1 a-v1) (nth 1 a-v2)))
    (setq g-b-dat (get-cdat (nth 2 a-v1) (nth 2 a-v2)))

    ;;  Make a face with all attribute values being `unspecified'. It is merely used to be
    ;;  overridden by the inherited face(s) (the last parameter of function `face-attribute')
    ;;  for simulating a merge process.
    ;;
    ;;  Emacs help info: You can specify more than one face for a given piece of text; Emacs
    ;;  merges the attributes of all the faces to determine how to display the text. If a
    ;;  list of faces is used, attributes from faces earlier in the list override those from
    ;;  later faces.
    (make-face 'nil-face)))

;;  <span style='color:red;'><s><u><b><i>txt</i></b></u></s></span>
(defun format-faced-txt (txt face)
  (let (a-v1 a-v2 a-v3)
    (setq a-v1 txt)
    (setq a-v1 (replace-regexp-in-string "&" "&amp;" a-v1))
    (setq a-v1 (replace-regexp-in-string "<" "&lt;" a-v1))
    (setq a-v1 (replace-regexp-in-string ">" "&gt;" a-v1))
    (setq a-v1 (list a-v1))
    (setq a-v2 a-v1)

    (setq a-v3 (face-attribute 'nil-face :slant nil face))
    (unless (eq a-v3 'unspecified)
      (setq a-v1 (cons "<i>" a-v1))
      (rplacd a-v2 (list "</i>"))
      (setq a-v2 (cdr a-v2)))
    (setq a-v3 (face-attribute 'nil-face :weight nil face))
    (unless (eq a-v3 'unspecified)
      (setq a-v1 (cons "<b>" a-v1))
      (rplacd a-v2 (list "</b>"))
      (setq a-v2 (cdr a-v2)))
    (setq a-v3 (face-attribute 'nil-face :underline nil face))
    (unless (eq a-v3 'unspecified)
      (setq a-v1 (cons "<u>" a-v1))
      (rplacd a-v2 (list "</u>"))
      (setq a-v2 (cdr a-v2)))
    (setq a-v3 (face-attribute 'nil-face :strike-through nil face))
    (unless (eq a-v3 'unspecified)
      (setq a-v1 (cons "<s>" a-v1))
      (rplacd a-v2 (list "</s>"))
      (setq a-v2 (cdr a-v2)))
    (setq a-v3 (face-attribute 'nil-face :foreground nil face))
    (unless (eq a-v3 'unspecified)
      (setq a-v1 (append (list "<span style='color: " (cvs2htmcvs (color-values a-v3)) ";'>") a-v1))
      (rplacd a-v2 (list "</span>"))
      (setq a-v2 (cdr a-v2)))
    a-v1))

(defun faced-buf2htm-process (buf1 buf2)
  (let (a-v1 a-v2 a-v3 a-v4 a-v5)

    (with-current-buffer buf1
      (setq a-v1 (point-min)))

    (setq a-v3 t)
    (while a-v3
      (setq a-v2 (next-single-property-change a-v1 'face buf1))
      (unless a-v2
        (setq a-v2 (with-current-buffer buf1 (point-max)))
        (setq a-v3 nil))

      (with-current-buffer buf1
        (setq a-v4 (buffer-substring a-v1 a-v2)))
      (setq a-v5 (get-text-property 0 'face a-v4))
      (with-current-buffer buf2
        (apply 'insert (format-faced-txt a-v4 a-v5)))

      (setq a-v1 a-v2))

    ))

;;  Make sure the text properties are updated by scrolling through the whole buffer.
(defun update-txt-prop ()
  (goto-char (point-min))
  (set-window-start (selected-window) (point-min))
  (scroll-up (1- (count-lines (point-min) (point-max)))))

(defun faced-buf2htm ()
  (interactive)
  (let (a-v1)
    (save-excursion

      (setq a-v1 (get-buffer-create (generate-new-buffer-name "*HtmlFromFacedBuf*")))

      (message nil) (message "Updating text properties of the buffer ...")
      (update-txt-prop)

      (with-current-buffer a-v1
        (insert "<pre>"))

      (message nil) (message "Converting buffer text ...")
      (faced-buf2htm-init)
      (faced-buf2htm-process (current-buffer) a-v1)

      (with-current-buffer a-v1
        (insert "</pre>")
        (html-mode))

      (switch-to-buffer a-v1)

      )))

(provide 'faced-buf2htm)

;;;  Code snippets for experiments.

;; (text-properties-at (point))
;; (goto-char (next-property-change (point)))
;; (goto-char (next-single-property-change (point) 'face))
;; (color-values (face-attribute 'font-lock-type-face :foreground))

;;  (defun update-txt-prop ()
;;    (goto-char (point-min))
;;    (scroll-up (1- (count-lines (point-min) (point-max)))))
;;
;;  (defun update-txt-prop ()
;;    (set-window-start (selected-window) (point-min))
;;    (beginning-of-buffer)
;;    (scroll-up (1- (count-lines (point-min) (point-max)))))
;;
;;  (defun update-txt-prop ()
;;    (beginning-of-buffer)
;;    (set-window-start (selected-window) (point-min))
;;    (scroll-up (1- (count-lines (point-min) (point-max)))))
程式產生出來的 HTML 中,所有的 style 都是內嵌的,因此沒有需要再修改 CSS,不過缺點就是轉出來的 HTML 碼會比較大。

下面是一個由 PHP 所寫成的簡單 hello world 範例其轉換前後的對照。轉換前的 PHP 原始碼:
<?php
echo "Hello, world!";
?>
轉換後的 HTML 原始碼:
<pre><span style='color: #5f9ea0;'>&lt;?php</span>
<span style='color: #a020f0;'>echo</span> <span style='color: #bc8f8f;'>"Hello, world!"</span>;
<span style='color: #5f9ea0;'>?&gt;</span>
</pre>

使用方法

使用方法很簡單,先將上面的 Elisp load 進來:
M-x load-file
上面輸入後會提示你輸入 Elisp 的路徑:
/path/to/faced-buf2htm.el
load 完成後 switch 到任何一個要被轉換的 buffer 然後打:
M-x faced-buf2htm
等程式跑完後就會自動開一個新的 buffer,裡面就是轉出來的 HTML,複製下來再貼到網路上去即可。

實作註記

程式主要的功能是將文字的 face 屬性擷取出來並轉成 HTML,當時寫完後開了幾個檔來轉轉看,但是發現有時開一個大一點的檔來轉,轉完了以後某些文字竟然沒有 face 屬性。再多試了幾次以後發現這些沒有 face 的文字大多是落在檔案的後段,不過也有一些例外。最後發現原來這些沒 face 的文字幾乎都是在檔案開啟後,在瀏覽 buffer 的過程中沒有被瀏覽到的文字,所以如果在檔案開啟後,按住 page down 鍵不放,讓 Emacs 從頭捲到尾把整個 buffer 瀏覽一遍就不會有這個問題了。猜想這個現象應該是 Emacs 為了節省開啟檔案的時間或為了減少一些不必要的工作,因此未被瀏覽過的 buffer 部份它就不作 syntax highlighting 所以這些文字也就沒有 face 屬性了。接下來的重點就是如何讓這個瀏覽的動作自動化,以強迫所有的文字屬性都有被更新到。試了幾種方法後終於試出來了,就是程式中 update-txt-prop 函數,只要三行就可以做到:
;;  Make sure the text properties are updated by scrolling through the whole buffer.
(defun update-txt-prop ()
  (goto-char (point-min))
  (set-window-start (selected-window) (point-min))
  (scroll-up (1- (count-lines (point-min) (point-max)))))
因為轉出來的文字會被當成 HTML 來使用,因此在文字中具有 HTML 意義的部份都要 escape 掉以免這些文字被當作 HTML 而造成轉換上的失真。例如 HTML 中的 tag 都是用角括號 (即 ...> ) 括起來的,因此轉換時要將文字中大於 (>) 及小於 () 的符號 escape 掉,以避免包夾在中間的中文字被當作 HTML tag,這裡大於及小於可以用對應的 character entity reference 來取代,分別為 &gt; 及 &lt; 除此之外用來起始 character entity reference 的 ampersand (&) 同樣也要用 &amp; 取代掉,所以這就是函數 format-faced-txt 前面幾行所做的工作:
(defun format-faced-txt (txt face)
  (let (a-v1 a-v2 a-v3)
    (setq a-v1 txt)
    (setq a-v1 (replace-regexp-in-string "&" "&amp;" a-v1))
    (setq a-v1 (replace-regexp-in-string "<" "&lt;" a-v1))
    (setq a-v1 (replace-regexp-in-string ">" "&gt;" a-v1))
;                .                 .
;                .                 .
;                .                 .
小弟目前所想到需要被 escape 的只有這些符號,其它需要 escape 的符號如果各位前輩有發現的話可以跟小弟告知。此外感謝 alan 在這篇文章的意見中提到在 EmacsWiki 上有一個 package 叫 Htmlize 提供類似但更成熟的功能,各位如果覺得 faced-buf2htm.el 的功能不符合需要,也可以試試 Htmlize。

Demonstration of source code to HTML conversion by Emacs

07月01日

DreamerC's face
DreamerC


縮小 展開

新版 lxmusic 需要您的幫忙



新版 0.3 的 lxmusic 已經上傳到 debian mentors, 需要 sid 內的套件才可以使用

加入至 /etc/apt/sources.lixt
---
deb http://mirror.nttu.edu.tw/debian/ unstable main contrib non-free
---

需要自行編譯
下載網址
http://mentors.debian.net/debian/pool/main/l/lxmusic/

編譯前請確定
你現在使用的 xmms 版本為 0.6DrMattDestruction-1 ,
0.3 和舊版 0.2 並不相容

Debian 編譯流程如下
---
$dget http://mentors.debian.net/debian/pool/main/l/lxmusic/lxmusic_0.3.0-1.dsc
$sudo apt-get install libxmmsclient-dev libxmmsclient-glib-dev libxmmsclient-glib1 libxmmsclient5 xmms2-dev intltool libgtk2.0-dev pkg-config automake python debhelper autotools-dev
$dpkg-souce -x lxmusic_0.3.0-1.dsc
$cd lxmusic-0.3.0 && debuild
---

如果發現沒聲音的話,請檢查是否安裝了
xmms2-plugin-alsa (音源輸出)
xmms2-plugin-* (此為你需要的解碼, 如 flac ,mpg123 )

AppleBOY's Blog's face
AppleBOY's Blog


縮小 展開

[Perl] 解決 Wide character in print with UTF-8 mode

最近在寫 Perl 的程式,發現在正規比對的時候,print 出中文資料會出現 “Wide character in print at” 的 warning 訊息,在 google 找到一篇解決方法:Perl with UTF-8 mode,這篇提出的解決方法有很多種,comment 留言也有提供解法,可以去看一下,還蠻不錯的,那底下是我參考的解法:

只要在表頭加上:

use utf8;
binmode(STDIN, ':encoding(utf8)');
binmode(STDOUT, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');

完整的檔案如下:

#! /usr/bin/perl -w
use Carp;
use File::Basename;
use LWP::Simple;
use WWW::Mechanize;
use LWP::UserAgent;
use WWW::Shorten '0rz';
use Getopt::Std;
use DBI;
use utf8;
binmode(STDIN, ':encoding(utf8)');
binmode(STDOUT, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');
if($_ =~ m/\s*<div\s*class="title"><a\s*href=".+">(.+)<\/a><\/div>\s*/)
{
  $pic_desc = $1;
  print "desc: " . $1 . " \n" if $verbose;
}

Related View

jserv's face
jserv


縮小 展開

針對 ARMv7 優化的 Android

前文「升級 Android 內建 GNU Toolchain 到 gcc 4.4」提及使用更新的編譯器平台,現在追蹤的是 gcc 4.4/4.5,不排除引入 LLVM,這些準備都是為了允許施加更多優化、展現平台的特性,而在 Android 的 build system 也需要作一些更動,至少涵蓋以下:

  • 針對硬體平台的編譯參數
  • Dalvik machine-dependent interpreter implementation (mterp)
  • 針對硬體特徵優化的關鍵軟體,如 BlueZ 中處理音訊 Bluetooth low-complexity, subband codec (SBC) 的實做
當然優化是無止盡的,我們只求在合理的工程資源,能解決夠多的技術議題即可。筆者的參考修改可見 android-armv7.patch,其中做了以下調整:
  • 設定 gcc 編譯參數為 "-march=armv7-a -mtune=cortex-a8 -mfpu=neon",適用於 BeagleBoard (TI OMAP 353x) 平台
  • 額外啟動 gcc 的 Auto-vectorization 優化策略
  • 以 ARM NEON 指令集優化 SBC 的執行效能
前期我們還是著重於泛 ARMv7 平台的優化技術,再來就是針對 SoC 平台的 DSP 與特性去作進一步處理。為了證明以上的修改發揮作用,可檢視 libjpeg 是否自動的做了 vectorized,也就是看看有無 ARM NEON 指令集的生成:
# ./prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-objdump -d \
out/target/product/generic/obj/STATIC_LIBRARIES/libjpeg_intermediates/jdmerge.o | egrep "v[add|mov]"
1d4: f2c09012 vmov.i32 d25, #2 ; 0x00000002
1d8: f3c01210 vmov.i32 d17, #32768 ; 0x00008000
200: f26048a9 vadd.i32 d20, d16, d25
204: f22069b8 vmul.i32 d6, d16, d24
208: f26438a9 vadd.i32 d19, d20, d25
20c: f2266821 vadd.i32 d6, d6, d17
至於 ARM NEON 指令集,這裡不贅述,可參考 ARM 官方文獻 NEON Technology

Mozilla Firefox 3.5 可以更新了 – openSUSE 11.1

Mozilla Firefox 3.5 於昨日釋出之後,OpenSUSE 11.1 的更新頻道中也已經提供下載使用了,有興趣的朋友可以將http://download.opensuse.org/repositories/mozilla/openSUSE_11.1/ 這個頻道加入,操作方式如下所示:

  • zypper ar http://download.opensuse.org/repositories/mozilla/openSUSE_11.1/ mozilla
  • zypper up MozillaFirefox

目前新版本不支援 Beagle Indexer 1.1.0,也尚未提供更新,因此暫時會被停用。此次版本新增功能如下,有興趣的朋友可以更新使用:( 以下轉載自 moztw.org )

Firefox 3.5 以去年尚開發中的 Gecko 1.9.1 排版引擎為基礎,相對於舊版 Firefox 提供了許多改變,支援新的網頁技術、增進效能,且容易使用。值得一提的功能包括:

Suse寂客's face
Suse寂客


縮小 展開

openSUSE 每週新聞第78期

本期摘要: openSUSE 論壇已經達到 30,000 使用者 Google 夏日程式碼大賽狀態回報 Jigish Gohil : 使用 SuSEfirewall 防範 SSH 暴力攻擊 metaverse: 給作家使用的更多自由且開源碼工具 openSUSE 論壇: 在 SUSE 中如何開啟 .docx 檔案?本土社群活動:與openSUSE來個夏日約會(6/27)完整閱讀openSUSE Weekly News 繁體中文版第78期openSUSE Weekly News 繁體翻譯計劃openSUSE每週新聞由本土社群完成譯稿後於每週二晚上發佈

Fred's blog's face
Fred's blog


縮小 展開

小心移除 GList 裡的 Node

最近忙著開發新的 LXNM(Lightweight Network Manager),但在開發的過程中碰到了一個 Critical Bug,該 Bug 會讓 LXNM Daemon Crashes。難過的是,已經費盡心思卻仍然找不出問題所在,以致浪費好多時間在 debug。最後多虧了 Paulliu 的協助,終於找出了程式中臭蟲,令人想不到的是,問題居然是出在 GList 的操作。

這問題出在於移除 GList 裡的 Node 之後,再讀取下一個 Node 時會 Crash,這有一個簡化後的錯誤範例:

GList *node;

for (node=mylist;node;node=g_list_next(node)) {
mylist = g_list_delete_link(mylist, node);
}

這樣表面看起來或許沒有錯誤,但以 Link-list 的基礎觀點來看,卻馬上可以發現到問題所在。該程式中,當迴圈進行到第二輪時,會因為 g_list_next() 無法取得下一個 Node 而死在那裡,因為供參考的 Node 已經在第一輪迴圈就被刪除,我們無法取得其 Node->next,當然就會發生錯誤。因此,需要稍微修改,以避免掉這樣的問題:
GList *node;
GList *next_node;

for (node=mylist;node;node=next_node) {
next_node = g_list_next(node);
mylist = g_list_delete_link(mylist, node);
}

GLib 提供的 API 包裝,讓懶惰的我們可以很輕鬆的建立和操作 Link-list,當然難免就會不小心寫出像這樣有問題的 Code 來。因此,對程式開發者而言,就算 GLib 再方便好用,資料結構和各種演算法的理論還是無法完全拋棄。

erin's face
erin


縮小 展開

few notes about android bluetooth

bluez version3.36 source code in Android git
git://android.git.kernel.org/platform/external/bluez.git

start bluetooth manually
Pull high in BT power

#echo 1 > /sys/class/rfkill/rfkill0/state


Load BT firmware to hci stack
# hciattach -n -s 115200 /dev/ttyHS0 texas 4000000 flow

Texas module LMP version : 0X3
Texas module LMP sub-version : 0X1126
internal version freeze: 38
software version: 2
chip: brf6300 (4)
Setting speed to 4000000
Texas speed changed to 4000000.
Loading firmware from /etc/firmware/brf6300.bin...
Firmware load successful.

Start HCI device
# hciconfig hci0 up


Start HCI daemon
# hcid -s -n -f /etc/bluez/hcid.conf

hcid[307]: Bluetooth HCI daemon
hcid[307]: Device hci0 has been activated

Gettingthe current values from dbus:

# dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter.GetMode
# dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter.GetDiscoverableTimeout

Changing to discoverable mode and setting the timeout to 60 seconds

# dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter.SetMode string:discoverable
# dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter.SetDiscoverableTimeout uint32:60


check bluetooth is On or Off
# ps | grep hci

325 1002 744 S /system/bin/hciattach -n -s 115200 /dev/ttyHS0 texas
326 1002 1608 S /system/bin/hcid -s -n -f /etc/bluez/hcid.conf

bluetooth configuration file:
/etc/bluez/hcid.conf

hcid.conf manual
http://linux.die.net/man/5/hcid.conf

check bluetooth device in detail
# hciconfig -a

hci0: Type: UART
BD Address: 00:22:A5:B8:AD:65 ACL MTU: 1021:4 SCO MTU: 180:4
UP RUNNING PSCAN
RX bytes:2271 acl:18 sco:0 events:66 errors:0
TX bytes:1156 acl:16 sco:0 commands:39 errors:0
Features: 0xff 0xff 0x2d 0xfe 0x9b 0xf9 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'g1mokoko'
Class: 0x48010c
Service Classes: Capturing, Telephony
Device Class: Computer, Laptop
HCI Ver: 2.0 (0x3) HCI Rev: 0x0 LMP Ver: 2.0 (0x3) LMP Subver: 0x1126
Manufacturer: Texas Instruments Inc. (13)

# dmesg | grep Blue

[ 5.751220] Bluetooth: HCI UART driver ver 2.2
[ 5.751525] Bluetooth: HCI H4 protocol initialized
[ 5.751831] Bluetooth: HCILL protocol initialized
[ 5.767395] Bluetooth: L2CAP ver 2.11
[ 5.767669] Bluetooth: L2CAP socket layer initialized
[ 5.768005] Bluetooth: SCO (Voice Link) ver 0.6
[ 5.768524] Bluetooth: SCO socket layer initialized
[ 5.782531] Bluetooth: RFCOMM socket layer initialized
[ 5.782928] Bluetooth: RFCOMM TTY layer initialized
[ 5.783599] Bluetooth: RFCOMM ver 1.10
[ 5.783905] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 5.784210] Bluetooth: HIDP (Human Interface Emulation) ver 1.2

Scan nearby bluetooth devices
# hcitool scan

Scanning ...
00:22:43:C6:5B:B9 daydreamer-0
00:18:C5:42:18:78 Erin-Nokia N73
00:1E:52:6D:E8:E9 erin's keyboard
00:0F:79:08:D4:05 GgBlu
00:07:61:4B:20:3B Bluetooth Travel Mouse

Check what service it has: AVRCP,A2DP,HandsFree, Headset
# sdptool browse local

Browsing FF:FF:FF:00:00:00 ...
Service Name: Audio Source
Service RecHandle: 0x10000
Service Class ID List:
"Audio Source" (0x110a)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 25
"AVDTP" (0x0019)
uint16: 0x100
Profile Descriptor List:
"Advanced Audio" (0x110d)
Version: 0x0100

Service Name: AVRCP TG
Service RecHandle: 0x10001
Service Class ID List:
"AV Remote Target" (0x110c)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x100
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0100

Service Name: Voice Gateway
Service RecHandle: 0x10002
Service Class ID List:
"Headset Audio Gateway" (0x1112)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 11
Profile Descriptor List:
"Headset" (0x1108)
Version: 0x0100

Service Name: Voice Gateway
Service RecHandle: 0x10003
Service Class ID List:
"Handsfree Audio Gateway" (0x111f)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 10
Profile Descriptor List:
"Handsfree" (0x111e)
Version: 0x0105

Connect to bluetooth keyboard
add these lines to /etc/bluez/hcid.conf
device 00:1E:52:6D:E8:E9 {
name “Bluetooth Keyboard”;
auth enable;
encrypt enable;
}
# hidd --connect 00:1E:52:6D:E8:E9


Connect to bluetooth mice
add these lines to /etc/bluez/hcid.conf
device 00:07:61:4B:20:3B {
name “Bluetooth Mouse”;
}
# hidd --connect 00:07:61:4B:20:3B


Confirm the connections
hidd --show

00:1E:52:6D:E8:E9 Bluetooth HID Boot Protocol Device [0000:0000] connected [boot-protocol]
00:07:61:4B:20:3B Bluetooth HID Boot Protocol Device [0000:0000] connected [boot-protocol]

黑眼珠's face
黑眼珠


縮小 展開

openSUSE 每週新聞第78期已經上線

本期摘要:

  • openSUSE 論壇已經達到 30,000 使用者
  • Google 夏日程式碼大賽狀態回報
  • Jigish Gohil : 使用 SuSEfirewall 防範 SSH 暴力攻擊
  • metaverse: 給作家使用的更多自由且開源碼工具
  • openSUSE 論壇: 在 SUSE 中如何開啟 .docx 檔案?
完整閱讀
openSUSE Weekly News 繁體中文版第78期
openSUSE Weekly News 繁體翻譯計劃

06月30日

EdwardLee's face
EdwardLee


縮小 展開

科學濃縮中藥的話題

最近科學濃縮中藥(科中)的話題炒得滿天飛。裡頭似乎是內幕重重,不過,這些內幕有許多都是未經證實。

http://anhydride.pixnet.net/blog/post/28249530
http://anhydride.pixnet.net/blog/post/27714806


這其中,藥廠會比較看重誰的意見呢?顯然是中醫院、診所的中醫師的需求,畢竟他們才是這些藥廠的最大主顧。

但我們小老百姓可沒有想那麼複雜,我們只是想服用較為安全的科中而已。因為各廠的競爭關係,他們所說的話都不可盡信,我們只是想在各種品管方面,有關單位能夠把關好,不管是哪家藥廠的產品,讓我們用得安心,僅此而已。所以,這裡建議出來說話的藥廠、醫師或業務,你們不必說那麼多的內幕,我們想聽的是:

1. 如果有相反意見,是否請提出檢測數據,而不是空口保證。
2. 如果自信藥廠的品管都能做到外國的標準,那麼請衛生署就訂定跟得上外國腳步的標準不就好了?
3. 是否能請具公信力的有關單位來檢測,並定期公布檢測內容?這樣豈不是可以無需大家吵來吵去沒有個結果。

這裡當然不光是針對中藥,西藥也一起來依檢測標準來檢測,並定期公布。許多人認為這是在打壓中醫,我個人認為是敏感了點,像我平常就有在服用科中,所以對這個議題當然是會關注,也當然會選檢測合格的科中來服用,如果各藥廠認為你的產品是合格的,那麼請公開你的檢測資料。

也拜託你們,請不要告訴我不合標準的科中是對人體無害的,那把標準廢掉不就好了,何必多此一事?如果你的邏輯還清楚的話,也請不要告訴我某某食品的更高,我還可以告訴你,深水魚類的重金屬更高。我們要的是一個無污染的最低保證,如此而已,我們當然知道,「鐵落」的含鐵量是很高的。


留言處:
http://hyperrate.com/thread.php?tid=11971

Fred's blog's face
Fred's blog


縮小 展開

自問,自己「值」每個月兩萬二嗎?

每天對自己的領域鑽研又鑽研,每日睡夢中總想著明天還有什麼創意可以做,生怕自己一不小心就在這時代中落後。隱約還記得 [jserv] 在 IRC 上曾說過:「我們都是被熊追趕的人,只是當下跑在前面還是在後面的差別。」,是的,一旦不小心被其他人所超越了,就只能等著讓熊給抓走,被主流社會給丟棄。

先不論是否被社會所丟棄,近年來就連進入這場比賽的門票,都並不好拿,景氣不佳導致許多社會新鮮人被職場拒於門外。有鑑於此,教育部為協助畢業生進入職場,提出「培育優質人力促進就業計畫」,簡單來說,政府花每個月兩萬二千元請學生去公司體制上班實習以體驗職場,其詳細內容在此就不多說,不瞭解的人可以透過關鍵字「兩萬二」找到多討論和說明。雖然,該計劃制度細節和保障一直有所爭議,但就題目來看,出發點良好,所以若有朋友問我是否該參加,我總是鼓勵他們可以去嘗試看看,原因有幾點:

  • 吸取工作和實務經驗,以增加自身實力和履歷
  • 可藉由實戰瞭解自己不足之處
  • 未來仍有機會繼續留任甚至直接進入正式公司體系
當然,也有許多朋友對我的建議嗤之以鼻,並提出他們的論調,我也在此稍做回應:

每個月兩萬二千元太低,大學生畢業少說 2xxxx ~ 3xxxx

雖然我和大家一樣是個學生,但我一直以來就不懂大學畢業生 2xxxx 元起跳這價是誰定的?為何人人都可以說的如此理直氣壯?照理說,這些定價就像是青菜的價格一樣,是供需法則下的產物,颱風過後市場行情特好,平時就價碼普通甚至免費。同理,當市場不缺人力,各公司職缺不補,你又怎能期望自己一定有好的價碼。

更者,在這景氣不佳的時代,沒經驗的新鮮人,又能夠帶給公司多少幫助?也可能不幸地,反而增加了公司風險。考量種種,自然人力行情低落,甚至不易有職缺。我們可以想想,在這到處放無薪假又減薪的時機,能力不足的新鮮人,憑什麼要求更高的價碼?更或許該自問,自己「值」每個月兩萬二嗎?若是你是公司老闆,是否需要聘用自己?也許,這反而是莫大恩惠,有工作給你,又給你機會學經驗,何樂而不為?

只是進去公司做不重要雜務,當沒保障的非正式員工且只有一年

這點我承認,許多公司私底下暗地裡難聽的說著,要請這種「免錢勞工」賺一筆,反正政府買單又零成本。但是想想,一上了戰場,是不是只做雜務就很難說,難道會脖子上掛牌以區分非正式員工?碰到急事還挑人做?商場上就是戰場,既然在同公司屋簷下,總是會有各種機會接觸到實務。

此外,雖然表面上只有一年,又不算公司正式資歷,但可能因為熟悉公司內體制,而一年後繼續被正式聘用而留任的機會很高。除非,你覺得自己的能力和實力無法被肯定?倘若是真的一年到了就得拍拍屁股走人,那也只能自認能力不足,甚至應該開心,因為這一年本該能力不足而導致失業,但是卻因參加這計劃有工作又有學到經驗。但要是你覺得自己實力強卻被丟棄,那你更不用怕,因為履歷上又多添一筆,比剛畢業時又更有經驗了。

這種雜務工作,一年後就算留任又能多好,薪水又不高

不知道為何現在學生都有強烈的被害妄想,就這麼肯定這工作一定很爛?業主會永遠把你當台籍傭人使喚?而滿心充斥著懷才不遇被犬欺之感。個人很好奇,是否一間公司有這麼多茶可以端,有這麼多髒廁所可以掃?(茶葉很多,泡不用錢!整間公司的人腸胃都不好,上廁所都亂噴!)

事實上,公司對新進人員除了金錢上的開銷之外,還有時間上的成本,每個新人都需要一些時間被教育和適應。若是公司可以省去了這一年的教育成本和風險,有足夠時間評估人才,公司一定樂見。當然,任何職缺的補充,最理想是以這些已經被評估過的人為首選。至少,若我是公司經營者,就會這麼做,因為這一年籌碼若好好運用,將可以為公司帶來更大財富和生力軍,為何要短視近利的把這籌碼白白燒光?究竟短視的是業主,還是抱著質疑眼光的學生們?你說呢?

不過話雖如此,碰到惡質主管或短視的爛公司,只是想榨乾你價值也不是不可能,但這本來就是求職的風險,也只有認了不是嗎?

後記

當做免費又有錢賺的職訓班,似乎更能容易以平常心看待這個計劃。對許多人而言,大學時,沒有累積實質的經驗,現在有機會來補救一下還是不錯。當然,要是你已經有非常足夠的經驗和能力,就應該不用怕沒工作和失業才是,也根本不用去浪費時間研究這計劃有沒有保障了。你應該去找的是高薪的工作。

自問,自己「值」每個月兩萬二嗎?沒有,賜我「全職」工作一萬八,我就要偷笑了,我自認沒有能力每天有效率的朝九晚五。難怪,我一直只能當打零工的工讀生呀。

後面有熊!努力跑呀!

richliu's face
richliu


縮小 展開

RVDS Load Linux Kernel Script

用 RVDS 的時候, 如果只是要拿來 Load kernel,  可以用以下這個簡單的 script. 自動 connect 到 Realview ICE, load kernel , run, 再 disconnect.

connect “@MPCore_0@RVI”
stop
readfile,raw,nowarn “<path to >/bootpImage”=0×100000
WAIT=OFF
go
disconnect,nodebug “@MPCore_0@RVI”

bglobal, disable “data abort”
bglobal, disable “prefetch abort”

這二個指令在 Trace32 時, 就可以讓 Linux booting 起來, 但是這一招在 RealView ICE 似乎沒有用.

hoamon's sandbox's face
hoamon's sandbox


縮小 展開

FOClass: 債券殖利率曲線計算

前篇文章中,我們已可算出零息債券的殖利率,但如果要套用在實務上的應用中,我們必須將觀察到的各點作一迴歸函式,讓我們可以找到各天期的殖利率。

運用原理為 Cubic Spline 方法。假設債券的 Discount 因子為一個三次方程式:



而每張債券的現金流量再套入下方方程式:



可得到類似 3.3a + 1.2b + 5.5c = 30 的等式。像是代入前篇文章的九張債券可得如下式子:





透過 OLS(ordinary least square) 方法求出 a, b, c 的適當值後,再代入:



即可算出殖利率曲線。如下圖:


  • 綠色線為零息債券殖利率曲線
  • 紅色線為附息債券殖利率曲線
我們可以看到 20~30年期的殖利率下降的十分奇怪。原因是我們的觀察值債券的年期最大只有 20 年,所以這一條函式在預測 20~30 年期的數據應該是有問題。

相關的 Python 程式如下:
 1 class CubicSpline:
2 """ 使用最小平方和原則作三次方方程式的迴歸
3 """
4 def __init__(self):
5 self.PVs = array([])
6 self.X = array([])
7
8 def addBondData(self, PV=0, Ci=[], Ni=[]):
9 self.PV = PV < 0 and PV or -1*PV
10 if Ni[0] == 0:
11 self.PVs = append(self.PVs, -1*self.PV-Ci[0])
12 self.Ci = array(Ci[1:])
13 self.Ni = array([[1, t, t**2, t**3] for t in Ni[1:]])
14 else:
15 self.PVs = append(self.PVs, -1*self.PV)
16 self.Ci = array(Ci)
17 self.Ni = array([[1, t, t**2, t**3] for t in Ni])
18
19 self.dt = dot(self.Ci, self.Ni)
20 if len(self.X):
21 self.X = append(self.X, [self.dt[1:]], axis=0)
22 else:
23 self.X = array([self.dt[1:]])
24
25 self.PVs[-1] -= self.dt[0]
26
27 def runOLS(self):
28 self.X = matrix(self.X)
29 self.PVs = matrix(self.PVs).T
30 self.b = linalg.inv(self.X.T * self.X) * self.X.T * self.PVs
31 return self.b


06月29日

瘋狂帽客's Blog's face
瘋狂帽客's Blog


縮小 展開

20個Linux系統/網路偵測的好工具

發現到一篇介紹20個Linux系統/網路偵測工具的好網頁,挺多我沒有使用過的,所以特別收錄起來,FYI。


PCMan 的 Blog's face
PCMan 的 Blog


縮小 展開

評價

不知不覺,工作快一年了。能得罪的護理站,大概也都得罪光了...
雖然嘴巴上都說,不在乎別人的評價,
但當你其實是很認真在堅持每件事,卻反而被所有人討厭
朋友逐漸變成敵人的時候,要堅持理想,幾乎是不可能的。

異常事件通報,是醫院內一個讓人又愛又恨的東西,
本來是用來提昇醫療品質的機制,卻讓我從此在院內黑掉。
所謂醫療異常事件,是鼓勵醫療人員自己通報發現的各種疏失,
藉由了解系統性的問題和發生原因,改善流程,來提昇醫療品質的手段
不以處罰為目的,而是透過根本原因分析,以改善系統缺失為目標。 ...

06月28日

黑眼珠's face
黑眼珠


縮小 展開

有點囧之夏日約會簡報上線

覺得不滿意,可以看得出來,夜愈深,品質愈差
下次還是不要熬夜
http://docs.google.com/Presentation?id=d94scnd_46fxqbmgdt
原為 odp 檔,但是 google doc 不吃這種格式
依照慣例,轉成 ms 格式總會有點怪怪的

感謝今日參加的各位朋友捧場
首次上場
小弟準備得不夠充份
真是抱歉

謝謝今日送我去坐車的那位大哥
還有 sakana 和所有工作人員與參加者
更新:發現少了一頁 1-click install collection
文件重傳並補上

FourDollars's face
FourDollars


縮小 展開

apt-get/aptitude update 時 GPG error 問題的發生與尋找解決之道

剛剛在 Ubuntu 8.10 上執行
sudo aptitude update
時遇到一個錯誤訊息
W: GPG error: http://download.virtualbox.org intrepid Release: 下列的簽名皆不合法: BADSIG DCF9F87B6DFBCBAE Sun Microsystems, Inc. (xVM VirtualBox archive signing key) <info@virtualbox.org>
於是就到 http://www.virtualbox.org 上面去尋找 GPG 這個關鍵字
果然找到了一篇相關的 bug report 裡面提到一篇郵件清單上面的文章 apt-get update problem: GPG error ... The following signatures
were invalid

文章當中提到了
rm /var/lib/apt/lists/*
就可以解決問題了
可是我不想要把 /var/lib/apt/lists/ 底下的東西都刪光光
於是看了一下 /var/lib/apt/lists/ 底下
[前面省略]
archive.ubuntu.com_ubuntu_dists_intrepid_main_source_Sources
archive.ubuntu.com_ubuntu_dists_intrepid_Release
archive.ubuntu.com_ubuntu_dists_intrepid_Release.gpg
archive.ubuntu.com_ubuntu_dists_intrepid_restricted_source_Sources
download.virtualbox.org_virtualbox_debian_dists_intrepid_non-free_binary-i386_Packages
download.virtualbox.org_virtualbox_debian_dists_intrepid_Release
[後面也省略]
跟之前的錯誤訊息比較看起來只是 VirtualBox 的 Release 這個檔案缺少了相對應的 Release.gpg 檔案
於是就把 download.virtualbox.org_virtualbox_debian_dists_intrepid_non-free_binary-i386_Packages download.virtualbox.org_virtualbox_debian_dists_intrepid_Release 這兩個檔案刪除掉
重新執行
sudo aptitude update
結果問題就... 還是沒有解決... 冏rz

好吧... 重新找線索看看發現 /var/lib/apt/lists/ 底下有個唯一的目錄 partial 底下也有 VirtualBox 相關的檔案
partial/
|-- download.virtualbox.org_virtualbox_debian_dists_intrepid_Release
`-- download.virtualbox.org_virtualbox_debian_dists_intrepid_Release.gpg
那麼試試看把這兩個檔案也刪除掉再執行一次
sudo aptitude update
結果就... 成功地解決掉這個問題啦~ ^o^

再看看 partial 目錄底下還是空空的
不過 partial 上層的目錄底下就看到了
download.virtualbox.org_virtualbox_debian_dists_intrepid_non-free_binary-i386_Packages
download.virtualbox.org_virtualbox_debian_dists_intrepid_Release
download.virtualbox.org_virtualbox_debian_dists_intrepid_Release.gpg
看起來就是 Release 檔案有了相對應的 Release.gpg 檔案
所以才能夠正常地執行~ :-D

What do you do with Linux ?

既上次的 geeko 圖像產生工具之後,Novell SLES 11 又有一個可以贏得大獎的活動嚕,那就是 ” What do you do with Linux ? “,有興趣的朋友只要拍下一段影片,告訴大家你和Linux間的愛恨情仇,微妙關係 ( 當然不能講壞的阿 ~ 要拍好的正向的宣導影片 ),那就有機會奪得大獎 ^^

當然,如果你也是害羞一族的,沒關係,再這個網站上也提供幾張不錯的 Geeko 桌布讓使用者下載使用,還在等什麼呢?立刻拿起你的手機自拍一下吧。

06月27日

Asho's face
Asho


縮小 展開

GeeXBox 1.2.2

Detailed Changelog (relative to 1.2.1 release):

- Multi-threaded video decoding for MPEG-1/2/4 and H.264 codecs.
- Support for newly discovered DVD MovieProtect encryption method.
- Extended DVD CSS descrambiling capabilities.
- Removal of GOOM audio visualization (was causing too much troubles).
- Automount daemon enhancements.
- Upgrade of MPlayer and its set of codecs.

我很好奇multi-threaded video decoding是怎麼做到的,mplayer有辦法達到multi-thread decode嗎?會不會是GeeXbox團隊自已實做出來的?

06月26日

EdwardLee's face
EdwardLee


縮小 展開

TeX Live 自行安裝字型

TeX Live 近年來的字型安裝和以往的有不同的機制,但其中有些細節可能尚未流利,需要自行注意一下。


TeX Live 安裝後會有個 texmf-local 目錄,主要的目的是給系統管理者安裝自己的 macro 及字型而設的,以避免 TeX Live 更新時又要重新安裝。不過,目前的流程會有些問題,那就是如果使用者在自己的家目錄已經利用 updmap 建立了家目錄的設定資料,那麼系統管理員新安裝的字型,這位使用者將會無福消受,因為 dvips 只會找第一個找到的 psfonts.map 檔,這樣系統上新安裝的字型就找不到了,所以,使用者也必須針對新安裝的字型 map 檔去執行一下 updmap,讓系統新安裝的字型在自家目錄建立資料庫。

系統管理員安裝新字型至 texmf-local,只要建立 $TEXMF/texmf-local/web2c/updmap-local.cfg,把 map 檔名寫進去,再執行 tlmgr generate updmap 即可。後有更新 TeX Live,texmf-local 中的字型還在,只要再重執行以上的動作即可使用。

暫時只能這樣了,似乎有些不便,但相信 TeX Live team 應有因應的計劃才是。



留言處: http://hyperrate.com/thread.php?tid=11693

AppleBOY's Blog's face
AppleBOY's Blog


縮小 展開

[PHP] Gallery 3.0 Beta 1 使用 Kohana MVC Framework

Gallery
Gallery 3.0 Beta 1 出來了,在 roga’s blog,看到這篇訊息,gallery 3 捨去 php smaty template engine,而改用 Kohana MVC Framework 這套 base on CodeIgniter 的 Framework,在 Gallery3:FAQ 裡面有提到為什麼會使用 Kohana 這套 MVC,gallery 團隊找尋了許多 MVC 的架構來幫助開發整個相簿系統,包含了 CakePHPZend FrameworkPradoSymfonyCodeIgniter,最後經過許多人的討論,選用了 Kohana 這套 MVC,原本打算考慮 CI 的,雖然 CI 支援 PHP4 跟 PHP5,以及它非常的小,對於效能方面也非常的好,但是並不支援 PHP5 的 exception,畢且有些少數的 Structure 只有支援 PHP4,所以就不被他們採納了,再來 Zend Framework 因為包含了 1705 個檔案,相當龐大,效能比 CI 少了 200-300%,雖然 ZF 文件相當豐富,不過沒有良好的 example 範例,所以導致 gallery 團隊遇到很多挫折,XDD。

最後選擇了 Kohana,雖然 Kohana 效能輸給 CI,不過這之間的差異極小,Kohana 也有 support PHP5 的 exception,Kohana 文件比 CI 還要少了些,不過對 gallery 團隊已經相當足夠了。底下有一篇各大 Framework 的效能比較:PHP framework comparison benchmarks,還有另一篇:Kohana vs CodeIgniter: Speed and Memory Usage Performance Benchmark

Related View

かいお's face
かいお


縮小 展開

決戰爛建商:鬥法篇 - 第二回

再次新發 B型投訴彈 4枚 後方持續 調動中