2012年9月9日 星期日

NVIDIA Driver

為了DIABLO 3,終於買了顯卡…之前就聽說N家的顯卡對ubuntu較友善。想不到是惡夢的開始。裝了驅動程式之後,螢幕解析度抓不到。就一直是 640x480。於是放棄ubuntu…

過了4個月,才有耐心解決這個問題。

A. 安裝官方的驅動程式,以下參考手把手網站的內容
  1. 請先去Nvidia官網下載你的驅動程式
    名字太長了我改成 nvidia.run並放到~/ (家目錄)下面
  2. 要賦予nvidia.run執行權限才能安裝哦
    • chmod +x nvidia.run
  3. 移除nvidia舊版並移除舊的設定檔
    • sudo apt-get --purge remove nvidia-* 
  4. 安裝編譯所需套件與核心 (這一個步驟我有點問題…說linux-restricted-modules...找不到)
    • sudo apt-get install build-essential libc6-dev pkg-config xserver-xorg-dev linux-headers-$(uname -r) linux-restricted-modules-$(uname -r) nvidia-settings gcc gcc-3.4
  5. 請按Ctrl+Alt+F1進入文字終端機
  6. 中斷X windows才能正確安裝顯示卡驅動程式
    • sudo /etc/init.d/gdm stop
  7. 開始安裝nvidia官方版驅動程式
    • sudo sh ~/nvidia.run
      1. 接著就進入了Nvidia的授權頁,第一個選accept同意他的授權聲明 按tab鍵可移動
      2. There appears to already be a driver installed on your system (version: 173.14.12).  As part of installing this driver (version: 173.14.12), the existing driver will be uninstalled.  Are you sure you want to continue? ('no' will abort installation) (Answer: Yes)
      3. No precompiled kernel interface was found to match your kernel; would you like the installer to attempt to download a kernel interface for your kernel from the NVIDIA ftp site (ftp://download.nvidia.com)? (Answer: No)
      4. Install NVIDIA's 32-bit compatibility OpenGL libraries? (Answer: No)此項只有amd64版本才會出現
      5. Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X?  Any pre-existing X configuration file will be backed up(Answer: Yes)
  8. 最後回到x windows會看到一個Nvida的畫面,這樣就代表安裝好了
    • sudo /etc/init.d/gdm start
  9. 咱們來看看有沒有安裝成功
    • glxinfo | grep "OpenGL version string:"
      OpenGL version string: .....
    • lspci | grep VGA
      01:00.0 VGA ......
B. 裝完之後,仍然解析度無效…網路上說要改 /etc/X11/xorg.conf
我試了n偏,仍然無效,最後在外國的討論區才發現重要的步驟

these options were critical
Option "ExactModeTimingsDVI" "TRUE"
Option "ModeValidation" "NoEdidModes"

貼上我的 xorg.conf
Section "Monitor"
    Identifier     "Monitor0"
    Vendorname "Generic LCD Display"
    Modelname "LCD Panel 1920x1080"
    Horizsync 31.0-83.0
    Vertrefresh 56.0 - 76.0
    Option         "DPMS"
    Option "ExactModeTimingsDVI" "TRUE"
    Modeline "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    Option "ModeValidation" "NoEdidModes"
EndSection
經過我的試驗,如果少了藍字,解析度依然無效。多了橘字…畫面字會糊掉

我不知道為什麼…這次的經驗,讓我對ubuntu的喜愛程度大打折扣


2011年1月14日 星期五

深入FLEX組件生命週期

深入FLEX組件生命週期

關鍵字: 深入flex組件生命週期
1、生命週期(LifeCycle)簡述
⑴調用組件構造函數。構造函數沒有返回類型,沒有參數,使用super()調用父類的構造器
⑵使用set,get設置組件屬性,常在set方法內監控一個布爾變量來實現失效機制
⑶調用addChild()方法將組件添加到父組件顯示列表中,FLEX將自動調用createChildren()invalidateProperties()invalidateSize()invalidateDisplayList()。只有將組件添加到父容器中,FLEX才能確定它的大小(size),設置它所繼承樣式(style)屬性,或者在屏幕上畫出它
⑷組件的parent 屬性設置為對父容器的引用
⑸樣式(style)設置
組件分發preinitialize事件
調用組件createChildren()方法
調用 invalidateProperties()invalidateSize()invalidateDisplayList()失效方法,FLEX將在下一個「渲染事件」(render event)期間對相應的commitProperties()measure() updateDisplayList()方法進行調用。這個規則唯一例外就是當用戶設置組件的height width 屬性時, Flex 不會調用measure()方法。也就是說,只有當組件的explicitWidth explicitHeight 屬性是NaN Flex才會調用measure()方法。
組件分發initialize事件。此時組件所有的子組件初始化完成,但組件尚未更改size和佈局,可以利用這個事件在組件佈局之前執行一些附加的處理
在父容器上分發childAdd事件
在父容器上分發initialize事件
在下一個「渲染事件」(render event), Flex 執行以下動作:
a.調用組件的commitProperties()方法
b.調用組件的measure()方法
c.調用組件的layoutChrome()方法
d.調用組件的updateDisplayList()方法
e.在組件上分發updateComplete事件
如果commitProperties() measure()updateDisplayList()方法調用了invalidateProperties()invalidateSize()invalidateDisplayList()方法,則Flexh 會分發另外一個render事件
在最後的render事件發生後, Flex執行以下動作:
a.設置組件visible屬性使其可視
b.組件分發creationComplete事件,組件的大小(size)和佈局被確定,這個事件只在組件創建時分發一次
c.組件分發updateComplete事件。無論什麼時候,只要組件的佈局(layout),位置,大小或其它可視的屬性發生變化就會分發這事件,然後更新組件來正確地顯示。
2、為什麼使用失效機制(invalidation mechanism)
一種情況是,當設置了組件的多個屬性後,比如Button 控件的label icon 屬性,我們需要所有屬性被設置後一次性執行commitProperties(), measure(), updateDisplayList()方法,而不是設置過label 屬性後執行一遍這些方法,然後在設置icon屬性後又執行一次這些方法。
另一種情況是幾個組件同時更改了它們的字體大小。程序更改字體大小的執行速度大大快於Flex 更新應用的速度,因此要在確定最終更改字體之後才開始更新佈局。另外,Flex 需要協調佈局操作以消除任何冗餘過程,而不是在每個組件更新它的字體大小之後都執行一次佈局操作。
Flex 使用「失效機制(invalidation mechanism)」來同步組件的更改。Flex 用一系列方法的調用,比如在setter方法內監控一個變更變量來標記組件的某些東西已經發生變化, 然後在下一個「渲染事件(renderevent)」中觸發組件的commitProperties(), measure(), layoutChrome()updateDisplayList()檢查這些布爾變量來完成最終的變更邏輯。這樣做的額外好處就是setter方法可以更迅速地返回,把對新屬性值的處理留給了commitProperties()方法。
失效方法及其對應的觸發函數如下:
invalidateProperties() 通知組件,以使下次屏幕更新時,它的commitProperties()方法被調用。
invalidateSize() 通知組件,以使下次屏幕更新時,它的measure()方法被調用。
invalidateDisplayList() 通知組件,以使下次屏幕更新時它的layoutChrome()方法和
updateDisplayList()方法能被調用。
當組件調用一個「失效」方法時,它就通知Flex該組件已經被更新。當多個組件調用失效
方法,Flex 會在schedules中協調這些更新,以使這些更新操作在下一次屏幕更新時一起執行。注意,createChildren()沒有對應的失效方法,它會在調用後被立即執行。

原文出處:http://pzmayf.javaeye.com/blog/418835

2010年10月20日 星期三

VMware Player 使用

因為工作的關系,要用到 VMware,於是直接從官網下載安裝Player版本。
安裝完畢後,執行時,出現底下的警告視窗
The host's Linux kernel yield() functionality is disabled. Multiprocessor virtual machines exhibit degraded performance without yield(). Choose 'OK' to enable the sysctl 'kernel.sched_compat_yield' or 'Cancel' to continue without yield().

大意是說,要開啟yield,效能才會好。只要按下 OK 就可以了。
但不想每次啟動都出現警告視窗的話,就要去編輯 /etc/sysctl.conf 這個檔
加入 kernel.sched_compat_yield=1 這行,並重啟系統就行了。

2010年10月3日 星期日

在VirtualBox 裏,安裝 Daemon Tools Lite

最近要在 VirtualBox 裏的 XP 掛載 mds 映像檔,於是安裝 Daemon Tools Lite,卻失敗了。
原來是要啟動VT-x/AMD-V才能安裝Daemon Tools
(VT-x/AMD-V 分別是Intel與AMD的虛擬化技術)

開啟 VirtualBox,選擇一個擬虛機器→設定值

除了VirtualBox裏設定外,在BIOS也必須啟用(一般是在cpu的設定裏)

※其實之前用Virtual CloneDrive,但不理想,還是得裝Deamon Tools Lite

2010年9月9日 星期四

Linux 基礎概念

其實我跟 Linux 也是不熟,只是試著想當好朋友。剛接觸 Ubuntu 的朋友,請試著建立以下的觀念
  1. 目錄結構
    Windows 一個磁碟機,就是一個槽,以英文字母:表示之。如古早以前 A:B:代表軟碟機,而第一顆硬碟就是C:(如果硬碟有分割就是D:E:…下去),光碟、USB隨身碟依此類推。
    Linux 沒有這種東西,只有目錄的概念,/ 代表整個檔案系統。而磁碟機是系統的一部份,所以磁碟機,會在 /media/ 這個目錄下,想使用磁碟機,就必須掛載與缷載。Ubuntu會負責掛載的動作,這是人性化的一部份。而缷載,像光碟機進出碟片,就會自動掛缷載。至於USB隨身碟,你只要在碟上按右鍵→安全的移除裝置,就可以取出了
    (檔案瀏覽器如果長得不一樣…因為我裝了Nautilus-Elementary)
  2. 檔案權限
    Linux 的檔案權限有三種:唯讀、讀寫、執行,再個別對擁有者、群組和其它人設定存取的權限。
    舉例,當我的帳號叫qoo,建立了一個 animation.xml 的檔。所以該檔的擁有者就是 qoo,擁有者可以設定那個群組或其它人對該檔的權限。但因為不是執行檔,也沒有必要去勾選允許檔案作為程式執行。
    (有時候我們從網路下載了檔案回來執行,請先確定該檔的執行權限有被勾選)
    在檔案上,右鍵→屬性 就可以開啟權限設定
    Linux 底下預設的系統管理員,也就是最高權限者,叫做 root,『根』先生。所以只有 root 對 / 根目錄有權限,底下的檔案擁有者都是 root。
    一般使用者對系統檔案就只能唯讀,可遠觀而不可褻玩焉。但難免需要異動 /etc、/usr/share 這些系統檔案時,就要先取得 root 權限。在終端機下的方法就是打 sudo ..... 表示我要以 root 的身份來執行命令。
    或者你可以在檔案或目錄上,直接右鍵→以系統管理員身份開啟
有了初步的目錄與檔案權限概念後,應該可以慢慢變成好朋友了

Web 設計開發工具

身為一個專業的程式設計師,難免必須要接觸UI設計。所以以前常用Gimp等修修小圖,做做按鈕…

這幾天發現了一個網頁開發工具,叫 WDT (Web Developer Tools) 。直接下載,點兩下安裝後,會出現在 應用程式→軟體開發,比較重要的功能有
  • CSS 按鈕產生器 (拉一拉就產生CSS碼)
  • JavaScript 壓縮容量與混餚
  • 圖形按鈕美化產生
先說說CSS按鈕產生器,就快快樂樂拉一拉。測試後的結果…Chrome, Firefox 行。IE 不支援…跟我想的一樣,本來就不對IE抱著CSS支持度的希望
使用方式,就是把產生後的 css 碼貼到網頁上,然後使用 HTML A Element 來套用
<a class="button" href="0#">我的按鈕</a>
※複製的css碼有點bug,假設貼上後的碼
.button {
    border-top: ....
要把每行前面的空白去掉,不然css不會生效。因為那空白不是真的空白,只是不可見字元
向作者反應bug,不到12小時,就修正了 ^^

再來說說 JavaScript 壓縮容量與混餚
  1. 先把JavaScript代碼貼上
  2. 可以勾選Base64 encode,就會把原始碼編過。當然也可以不勾選
  3. 按下Pack。不勾選Base64 encode的話,就是幫你壓縮容量,去掉換行等多餘字元
  4. 輸出結果
最後介紹 Cool Button Generato,這是打磨你的圖形按鈕,讓按鈕不亮也光。但是限制圖形只能是正方形大小 32, 48, 64, 96, 128
沒有什麼屬性可以調整,簡單易用,直接選擇單一圖形,或選擇整個資料夾下的圖形去做美化。我的實測
原按鈕
美化成正方形
美化成圓形
打亮後的按鈕,應該叫 Aqua Style 吧,其實圓形的好像不太完美,但也不錯了。這樣UI比較有Web 2.0 的感覺了吧

2010年9月5日 星期日

GetDeb 獲取最新的 PPA 來源

Ubuntu 安裝軟體的方式有兩種
  1. 從網路下載 .deb 的檔案,執行安裝
  2. 直接在軟體來源,加入 ppa 的網址
而以後者為佳,加入 ppa 來源後,軟體一有新版就會通知更新。而手動安裝 .deb 的方式就不會。
但不是每個軟體都有 .deb 或 ppa 來源的,以FileZilla(一套FTP軟體)為例,官方已經更新到3.3.4.1版。但官網沒有提供.deb,也沒有PPA,看來只能下載檔案,之後把 bin 目錄下的解壓至 /usr/bin 底下覆蓋來更新…

但實際上我們有另一個選擇。http://www.ubuntuupdates.org/ppas 照亮了我們,這裏收錄了很多 ppa 來源,而 GetDeb Apps 內含了很多最新版的應用軟體。將 getdeb ppa 加入我們的軟體來源。按照網頁上的說明,打開終端機

wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -

sudo sh -c 'echo "deb http://archive.getdeb.net/ubuntu lucid-getdeb apps" >> /etc/apt/sources.list.d/getdeb.list'

這樣一來,更新軟體,就會出現新版的了。
※ 其它軟體的 ppa 來源亦可由Ubuntu Tweak來增加