2014年1月13日 星期一

如何在 Synology DSM 直接 mount 舊硬碟

因為搬到外面住了,為了節省電費,我只把原本桌機的硬碟帶上來,然後買了一台 Synology DS214play NAS 來放資料,這樣就不用整天把電腦開著了! 

但是在準備要搬資料的時候發現了一個問題。當我一把硬碟插上去,一定需要先做過初始化的動作,也就是建立 RAID 才能使用,但這個步驟會把硬碟上面的資料都清除 hmm...。

現在情況是我手邊有一顆 USB 外接硬碟可以先存放資料,那要如何透過 DSM 把內接的硬碟資料搬出來,好把這顆內接硬碟在 DSM 內初始化再把資料搬回去呢??

1. 首先,先把內接硬碟直接插到 DSM 上面。但此時你會發現你完全找不到那顆硬碟在哪,因為 /dev 目錄下面亂的非常可怕。

brw-rw----    1 root     root        8,  11 Nov 25  2009 sda11
brw-rw----    1 root     root        8,  12 Nov 25  2009 sda12
brw-rw----    1 root     root        8,  13 Nov 25  2009 sda13
brw-rw----    1 root     root        8,  14 Nov 25  2009 sda14
brw-rw----    1 root     root        8,  15 Nov 25  2009 sda15
brw-rw----    1 root     6           8,   2 Oct 30  2003 sda2
brw-rw----    1 root     6           8,   3 Oct 30  2003 sda3
brw-rw----    1 root     6           8,   4 Oct 30  2003 sda4
brw-rw----    1 root     6           8,   5 Dec 26 00:47 sda5
brw-rw----    1 root     6           8,   6 Oct 30  2003 sda6
brw-rw----    1 root     root        8,   7 Nov 25  2009 sda7
brw-rw----    1 root     root        8,   8 Nov 25  2009 sda8
brw-rw----    1 root     root        8,   9 Nov 25  2009 sda9
brw-rw----    1 root     root       65, 160 Sep 17  2008 sdaa
brw-rw----    1 root     root       65, 161 Sep 17  2008 sdaa1
brw-rw----    1 root     root       65, 170 Nov 25  2009 sdaa10
brw-rw----    1 root     root       65, 171 Nov 25  2009 sdaa11
brw-rw----    1 root     root       65, 172 Nov 25  2009 sdaa12
brw-rw----    1 root     root       65, 173 Nov 25  2009 sdaa13
brw-rw----    1 root     root       65, 174 Nov 25  2009 sdaa14
brw-rw----    1 root     root       65, 175 Nov 25  2009 sdaa15
brw-rw----    1 root     root       65, 162 Sep 17  2008 sdaa2
brw-rw----    1 root     root       65, 163 Sep 17  2008 sdaa3
brw-rw----    1 root     root       65, 164 Sep 17  2008 sdaa4
brw-rw----    1 root     root       65, 165 Nov 25  2009 sdaa5
brw-rw----    1 root     root       65, 166 Nov 25  2009 sdaa6
brw-rw----    1 root     root       65, 167 Nov 25  2009 sdaa7
brw-rw----    1 root     root       65, 168 Nov 25  2009 sdaa8
brw-rw----    1 root     root       65, 169 Nov 25  2009 sdaa9
brw-rw----    1 root     root       65, 176 Sep 17  2008 sdab
brw-rw----    1 root     root       65, 177 Sep 17  2008 sdab1
brw-rw----    1 root     root       65, 186 Nov 25  2009 sdab10
brw-rw----    1 root     root       65, 187 Nov 25  2009 sdab11
brw-rw----    1 root     root       65, 188 Nov 25  2009 sdab12
brw-rw----    1 root     root       65, 189 Nov 25  2009 sdab13
brw-rw----    1 root     root       65, 190 Nov 25  2009 sdab14
brw-rw----    1 root     root       65, 191 Nov 25  2009 sdab15
brw-rw----    1 root     root       65, 178 Sep 17  2008 sdab2
brw-rw----    1 root     root       65, 179 Sep 17  2008 sdab3
--More--

我沒這麼多硬碟阿...

2. 使用 fdisk 來找到現在硬碟到底是對應到哪個代號
# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks  Id System
/dev/sda1               1         311     2490240  fd Linux raid autodetect
Partition 1 does not end on cylinder boundary
/dev/sda2             311         572     2097152  fd Linux raid autodetect
Partition 2 does not end on cylinder boundary
/dev/sda3             588      121601   972036912   f Win95 Ext'd (LBA)
/dev/sda5             589      121601   972028864  fd Linux raid autodetect

Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
256 heads, 63 sectors/track, 181688 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes

   Device Boot      Start         End      Blocks  Id System
/dev/sdb1               1      266306  2147483647+ ee EFI GPT

3. 如果你是 EFI GPT 類型的硬碟,可能需要多用 partd 來看到真正的partition 分割和檔案系統類型,因為在 EFI GPT 狀況下你切了幾個 partition,也只會看到 /dev/sd*1。我這邊沒有這樣的例子,但大家可以試試。
#partd /dev/sdb print

Model: Hitachi HDS723015BLA642 (scsi)
Disk /dev/sdb: 1500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End     Size    File system  Name                  Flags
 1      135MB  1500GB  1500GB  ntfs         Basic data partition

4. 接著要把他 mount 起來。這邊看到的例子是 NTFS 的檔案系統。這裡有個地雷就是 mount -t ntfs 是沒用的!! 要用另外一個指令...

# mkdir -p /tmp/mnt
# ntfs-3g /dev/sdb1 /tmp/mnt

5. 現在在 /tmp/mnt 下面已經可以看到這顆內接硬碟的資料囉,就把他往外接硬碟搬就可以了。一般來說 USB 外接硬碟在 DSM 下面是掛在 /volumeUSB* 

Reference

2013年10月9日 星期三

如何設計好的 API

從 gslin blog 看到的分享好文 「Parse Developer Day Video Series: How to Design Great APIs」。很原則性的大方向概述,但的確,這事好 API 的必要條件。

設計好 API 的動機:懶惰!

好的 API 可以讓你更懶惰

好的 API 的條件

直覺的

看到就知道怎麼用,不需要猜測

  1. 類似的東西就要有類似的結果。例如 length function 對於 string 和 array 應該有類似的結果。
  2. 平行化的結構。類似的命名要有相同的功能,例如 obj.saveInBackground(); vs. obj.deleteInBackground();
  3. 做髒髒的事。在命名上加上足夠的描述來呈現他的危險性、功能性等等。例如 $crashserverfrequency = true;

好文件的

一看就懂得文件,不要讓人去看 Source Code(?

  1. 簡單的問題應該簡單的被解釋。e.g. What does X do?
  2. Tutorial 應該要有趣不要無聊。
  3. Quick start 應該要越快越好。

Opinionated (自以為是的?)

建造統一哲學的 API,讓他看起來事一個人做的

  1. 風格相同。例如全部都是 REST
  2. 結果相同。例如輸出格式都是 JSON。這句話的意思是指輸出的 default 格式都是相同的,不代表不能選擇性的轉換格式。
  3. PHP String library 命名不統一被表xd..

2013年9月27日 星期五

[讀書心得] Google總部大揭密:Google如何思考?如何運作? 如何形塑你我的生活?

序言

今天是 Google 成立 15 年,剛好我也在前幾週看完了一本可以說是 Google 自傳的書本《Google總部大揭密:Google如何思考?如何運作? 如何形塑你我的生活?》。此書由現任 Wired 雜誌主編的 Steven Levy 所撰寫,不像一般是由外部觀察的文章,本書是由訪問大量 Google 現任與離職的員工與多次參加內部會議後撰寫而成,更能從內部看到 Google 本身的精神。(希望是真的 XD)
但總而言之,這是一本很適合睡前約讀的小品,即使他的段落有點長....

心得

草創

Google 創立與成長的過程其實並不特殊,一個很標準的 Start Up 的過程,在大學的研究計畫中獲得一個點子(如何利用網頁與網頁間的連結來評價網頁並進行搜尋,PageRank),一個嘗試 (利用學校的頻寬、電腦與就硬碟開始在校園中運行 Prototype),接下來看到流量,持續的精鍊(擴充機器、改進程式與演算法),找到資金成立公司或賣給大公司(當時第一大的搜尋引擎和 Yahoo! 接洽後都沒買)。
接著就是走著校園風格小辦公室(免費的食物),招募來自於頂尖學校且富有技巧的員工,持續改進演算法與爬蟲程式。書中提到 Google 的願景或說是創辦人的願景其實是期望能夠利用演算法(Algorithm),將全世界的資訊整合,讓任何人都可以輕易的找到與存取。然而作為一家接受別人投資的公司,也迫使著 Google 必須要想辦法獲利,而關鍵字廣告正是妥協,但也是 Google 成功的秘訣,小辦公室也因此變成大辦公室。前 CEO 施密特也受邀倒 Google 管理這個已經成為大公司,卻只又一群群工程師、hacker在運作的大學般的公司。
這故事跟 Facebook 的成長的故事相當類似,只差在一個是以搜尋引擎起家,一個是社群網路起家。社群網路的出現著實下了 Google 一跳,希望全部透過演算法建立一個人工智慧,提供使用者非人為提供的知識是 Google 的目標,但 Facebook 的出現讓 Google 發現莫非由使用者的親朋好友所提供的資訊卻才是有效的資料獲取方式? Google+ 是 Google 第一個不是為了公司願景所創造的產品,完全是為了追趕 Facebook。

2013年9月14日 星期六

[心得] 買了一台 13" Apple Macbook Air

好不容易拿到了畢業證書,決定要買個禮物考賞自己。為了要讓自己身邊有更多元的平台,就決定來買台搭載 OS X 的蘋果產品,畢竟用 VM 玩起來沒動畫實在沒 fu,最後就決定買了一台 13" Apple Macbook Air。

2013 09 12 09 53 16

先前有掀翻了初入門的書,所以大概還知道要怎麼操作,但也花了幾天來摸索要安裝什麼軟體以及各總和 Windows 筆電不一樣的操作方式。下面是我心得、遇到的問題 (希望有人可以跟我說怎麼解決 哈)以及我安裝的軟體。

心得&問題:

  • 2013 年的 Air,如果你考慮的是攜帶性、續航時間那在這個價位下他是前段班的選擇,如果有更多預算才能在高階的 Ultrabook 找到更好的選擇。
  • 多點觸控版:
    • 大概是最有趣的地方了,一隻手指頭到四隻手指頭都有不同的手勢可以使用。以前習慣使用觸控版右側來捲動捲軸,而在 mac 則要改用兩指滑動,但這個動作如果只用單手他就必須要整隻手離開鍵盤,這實在有點麻煩。後來我發現可以兩手用拇指一起滑,這樣也是可以捲動的啦。
    • 四指或三指上下滑動可以叫出 mission control 和 launchpad,不過鍵盤的 F3 和 F4 就可以做到了,所以好像沒有特別的優勢。
    • 右鍵需要雙指觸碰或點擊右下角,可惜 air 的觸控版有點硬,點擊要花的力氣手會酸 (還會有聲音),所以又再次使用兩隻拇指來解決xd。
    • 選擇文字是我遇到最大的困難,目前還沒找到解決方法,一定要點擊後才能選取,但如上面說的原因,會手酸。
  • 鍵盤:
    • 鍵盤配置少了 page up, page down, home 跟 end,前面兩個可以用 fn + 上下來達成,後面兩個我還在尋找他們 ||。
    • F1~F12 需要按住 fn 才能使用,最大的問題是在看網頁的時候每有 F5 可以按了 ….. well … 還有 command + R 可以用。
    • Ctrl + C/V 變成 command + C/V,這個配置我覺得距離有點近了,按起來有點彆扭,習慣中。
    • 按 delete 有時候會按到電源開關…
  • OS X
    • 我覺得這是一個相當適合單工的環境,把程式全螢幕顯示是我最愛用的功能。但當你把它最大化後,它會被放到一個新的桌面,我遇到的問題是當你把一個 app 獨立放在一個桌面而你又把它最大化,那這個最大化的app和你放其他東西的桌面間就會跑出一個空白的桌面…
    • 同一個程式的開多個視窗時還是只會有一個 icon 在 dock ,很容易就會找不到視窗,這也是頗困擾我的地方。
    • 注音輸入法我已經換成奇摩輸入法了,但是還是沒辦法只按 shift 就切換中英文輸入,選項到底在哪裡!!!
    • 其他~~還不錯用,繼續尋找它的小秘密和快捷鍵中...

軟體:

  • Chrome
  • Firefox
  • iTerm2
  • Sublime
  • MarsEdit
  • Mou
  • Evernote
  • Readkit
  • LINE
  • Welly
  • MplayerX
  • The Unarchiver
  • Dropbox
  • xcode

還有人要推薦好軟體嗎 :)?

2013年8月9日 星期五

WebConf 2013 筆記

最近好不容易碩士口試結束了,可以花點時間趕緊來追一下過去幾個禮拜...幾個月 lost 調的資訊。COSCUP 2013 的影片還沒出來,所以先來看一下 WebConf 的影片, 以下是 Day 1 我有看的 talk 的筆記:

WebConf 2013 筆記

Day 1

開發 web 的遠大前程

- Speaker: 李智樺 (Ruddy Lee)
  1. 要找到興趣很重要,不要為了達成特並目的去做
  2. Scrum 很重要, 但一個不能用
  3. 沒有 feedback, smaill iteration 就沒有敏捷開發
  4. 敏捷開發還是要寫文件 => test case, live docution
  5. 現在的 programmer 沒有人擁有自己的 code
  6. 開發團隊必須要有 一致的編程規範
  7. 時間管理很重要 番茄工作法
  8. Curation web, 兜兜哲學

node.js production site architecture

- Speaker: Ben (POP 作者)
  1. 監控 node app: Monit(Ubuntu 內建) and Forever(node 模組)
  2. Nginx 可以作為 reverse proxy 和 static file server. 在 production 環境下可以擋一台在前面增加 scalability
  3. 高擴展性架構 client -> load balancer -> * ( Nginx reverse proxy -> * node.js) -> * database cluster -> Membership, Payment -> CDN -> S3 (static files)
  4. 也可以用 Cloud Service: Heroku, Nodejitsu, mongoHQ
  5. 解除 limit
    sudo vi /etc/security/limits.conf
    #add the following 4 lines
    root soft nofile 51200
    root hard nofile 51200
    * soft nofile 51200
    * hard nofile 51200
    sudo vi /etc/pam.d/common-session
    #add
    session required pam_limits.so
    sudo vi /etc/profile
    #add
    ulimit -SHn 51200
  6. 我們在找人, 把 github 帳號丟給我們就好了 <- Github 非常重要

那些 Mockup 沒告訴你的事

- Spearker: Adam Wang (阿當)
  1. mockup 是一個模型: 任何一張 screenshot 都算是
  2. 彈性: i18n, 圖片的濫用
  3. 對齊: line-height, box-model, z-index
    text-overflow: ellipsis; /\*CSS3\*/
  4. 一致性: 配色與變數, 狀態
  5. 親和力: ARIA, tabIndex
    <a role="button" href="#">Panic</a>
  6. 漸進式改良: CSS3 box-shadow, text-shadow, border-radius, keyframe-anmation; placeholder, required
    http://youtu.be/hdTxeR90_
  7. 是介面不是圖: 防呆, pushState/PJAX
  8. 卷軸: 一目瞭然, Parallax scrolling
    stellar.js
  9. 效能: lazyload 10.跨裝置設計: Responsive Web Design
    不要用 :hover 來做提示了, 請加上 :active // 觸控螢幕沒有 hover

磚業也要專業 - 如何成為更好的 PHPer

- Speaker: 大澤木小鐵
此演講獎大量的 guideline,可以直接看投影片
  1. 微薪技嘉是台灣工程師的寫照
  2. debug 工具:
    xdebug.org
    FirePHP
  3. 統一的編成風格 http://www.php-fig.org/
  4. 套件管理 Composer

你們都誤解了,網路是很安全的!

- Speaker: 翁浩正 (Allen Own)
  1. live demo
  2. 無知: 管理者需要學習
    1. 最新資安弱點: expolit
    2. 最新駭客攻擊手法
    3. 新建置技術、新防禦技術
    4. 避免僥倖心態
  3. 無能: 管理者需要修練
    1. 伺服器不安全
      • 系統未更新、修補
      • 未做安全性設定
      • 未使用服務沒關閉
      • 開發環境未隔離: 備份檔, .svn, .sql
      • 管理後台未隔離
    2. 應用程式不安全
      • 使用別人撰寫的套件或框架
      • 自行撰寫不安全程式或設定
      • 網站錯誤訊息未隱藏: 資料庫欄位, 實體路徑
      • 老舊程式維護困難
    3. 管理不安全
      • 權限控管
      • 密碼安全性原則
      線上破解 hash cmd5.com
  4. 無恥: 管理者未盡責任
    1. 隱匿不報
    2. 推卸責任
    3. 湮滅證據
  5. 相關網站
    security focus
    大陸網站

無廢話 DRBD + Heartbeat 實戰

- Speaker: Weithenn
  1. DRBD: Distributed Replicated Block Device
    • 可以想做是跨網路的 RAID 1
  2. 高可用性的三種實現方式
    • DNS
    • IP: Heartbeat
    • MAC
  3. Failover: 壞了後有人救
  4. Failback: 回復後會自動回來 (但因為機器可能時好時壞, 這個動作手動比較好)
  5. DRBD + Heatbeat 是 host-level 的 HA, 不是 application-level 的保護, 所以單一 application 出問題不會切換的

Maintainable CSS with Sass and Compass

- Speaker: hlb (registrano, compass.app, fire.app)
  1. SASS + Compass
  2. SASS 可以直接算 HSL
  3. 可以自動切 Sprites, 也支援 Retina
    不擔心 IE 6, 7, 8 可以用 Icon Font / SVG
  4. 3.2 新增 placeholder 解決 extend 的問題
  5. (中略)
  6. 方法學
  7. CSS code guideline
  8. 自動化產生 style guide

2012 年網頁技術濃縮咖啡

- Speaker: 吳逸文 (Even Wu)
  1. 網頁設計是資訊流的整理, 可以任意折疊 (RWD)
  2. 應該要用 SCSS
    • Fire.app 很好用
  3. 顏色與形狀要注意
    • 調和顏色比重
    • 間隔, 突出
  4. Web 字體,用 Cloud font。
  5. Responsive Design
    • 圖: 先暫位
    • 文: 遺尿 (可以用 Macho.js)
  6. Hi-DPI 設計

Develop Tools in Modern Browsers

- Speaker: OOO
  1. alert 會讓程式停下來, console.log 會繼續執行, 所以 alert debug 還是很有用
  2. Firebug 算是第一個前端的開發工具
  3. live 介紹 chrome 開發者工具
  4. live 介紹 opera 開發者工具
  5. safari + ipad => remote debug
  6. Firebug Lite 獨立 browser 的工具

Media Query 123

- Speaker: 閃光洽 (Hina)
  1. CSS3 的新特性
  2. 針對不同裝置螢幕大小載入不同的 CSS
  3. @media 靠 @viewport 而不是瀏覽器本身
  4. 寬度需要依照裝置螢幕的密度來換算
  5. Content first: 在任何不同裝置上, 都能看到一樣的重點
  6. RWD = @media + @viewport
  7. @viewport 沒事不要亂改, 可以複製貼上
    <meta name="viewport" content="width=device-width">
    <meta name="viewport" content="width=device-width; initial-scale=1">
    <meta name="viewport" content="width=device-width; initial-scale=1; minimum-scale=1.0">

用原型驅動設計

- Speaker: 阿修 (Justin Lee/lis186)
  1. 專業分工: 研究 - 設計 - 前端 - 後端
  2. 環環相扣:
    • 使用者經驗設計師: 研究 + 設計
    • 使用者介面工程師: 設計 + 前端
    • 應用程式工程師: 前端 + 後端
  3. 打造原型
    • 紙面原型
    • 手工打造 HTML e.g. bootstrap
    • 工具打造 HTML e.g. FW
    • 影片
    • 互動 flash
    • 簡報
    • 可點擊 pdf
    • 線上工具
    • 立體模型
  4. Doule Diamond 設計流程: 點子 (Discover)-(Define) 願景 (Develop)-(Deliver) 成果
  5. 原型設計原則
    • 了解給誰看的
    • 設定要探索的範圍
    • 選擇適合的工具
    • 不一定要自己做, 用現成工具, 會意就好
    • 精細度足夠就好
    • 只做需要的部分
    • 早點開始做

網站效能調整-網站系統篇

-Speaker: TonyQ
  1. 效能簡單的定義: 更快的響應時間
  2. 效能調整的時間: 通常已經 production 了, 設計和實作階段只能假想效能問題, 但可能不是源頭
  3. 平民 style: 不用 cluster, load balance, data slicing
  4. 誰要來調整: team 內部的人, 外來專家不了解專案難以處理 (即使用 tools 也是)
  5. 4~5 萬 pageview/day 會碰到第一次門檻 (soft tune 即可), 10-20萬會碰到第二次門檻 (hardware 要強)
  6. 瓶頸產生: (1) 流量增加, (2) 新服務部屬, (3) 使用到外部 API
  7. 調整效能第一步: Profiling (在 tune 之前一定要做)
  8. Profiling 工具:
    • 開發者工具, 先了解時間耗損最多在哪
    • Database 的 slow query log
    • Google Analytics 找到 hot page, 找 downlaod time
    • 在 PHP 中插時間戳, 計算各部分所花的時間 (通常會符合 721 法則)
    • 在 JS 中插時間戳
  9. 一定要看數據說問題, 不要用猜的
  10. 有可能是 Framework 導致的, 例如 ORM 沒有用 lazy load
  11. 會有雪崩效應, 越來越多人按 F5
  12. table lock 要注意
  13. 方法:
    • Refine process
    • cache
    • index
    • 分離長時間的操作

2013年5月23日 星期四

神秘的 JavaScript 邏輯運算

JavaScript 邏輯運算子有個非常有趣的特性,最近遇到跟大家分享一下。(眾人: 連用個邏輯運算你都會有問題去跪算盤吧)

JS 的邏輯運算不會改變運算元的型別,而只是在運算時會將其視為 Boolean 來處理。因為這個特性,"最後" 運算完的值不一定是 Boolean。以下面的程式作為例子:

第一個 alert 中的 str || obj,因為 'hello' 轉換為 Boolean 時視為 true,由於 short path,就直接返回了,結果是 hello (WTF!)。

第二個 alert 中的 str && obj,由於 'hello' 是 true,因此要檢查 obj ,當然啦 obj 也是 true,雖然看起來很像是 false ... (參考 http://www.w3schools.com/js/js_obj_boolean.asp),因此返回後面的結果, object。

也就是說,其實寫在 if 裡面的結果是在最後又被轉換成 Boolean 才判斷的。

http://jsfiddle.net/welkineins/reJp9/


var str = 'hello';
var obj = {};
alert(str || obj);
alert(str && obj);

2013年4月6日 星期六

回頭看「10 倍速影像閱讀法」這本書

  回想國高中的時候我對速讀和影像閱讀還滿著迷的,能夠在一瞬間看完大量的文章資訊、背起大量的單字總是很令人嚮往。加上我那時功課不太好(汗),所以就更想要試試看有沒有效了。現在來看我必須說這些"技巧"和一些練習是有幫助的,雖然我跟隨特定的方法,但是就閱讀的速度上來說其實是真的有增加,或許真的是有讓我在學習時比較順利。

  到研究所的現在要看的資訊越來越多,Google 也越來越方便,我(不知道有沒有包含許多人)其實有一個很錯誤的習慣,我逐漸將頭腦當作一個大型的索引庫(Index),裡面放的只有關鍵字,而把內容就留在那成千上萬的網頁中,反正只要 Google 就可以找到,所以就慢慢演變成知道很多,但是也什麼都不知道的狀況(這可能是因為 RSS 用習慣造成的問題???)。清明連假回到台中在書架上看到這本「10 倍速影像閱讀法」,這是一本當時還滿紅的書,從Google 可以看到相當多的閱讀心得和評論,重新燃起我對這種方法的興趣,想著再來實踐一下這樣的方式,強末自己閱讀,能不能讓自己的頭腦成為知識庫而不是滿滿索引而已了。

博客來連結:10倍速影像閱讀法(新版)
(雖然我看的是舊版的)

永錫先生 2010 年在虎尾科大光電(所?)的講座,把基本方法都講得很完整,但是他把書中最懸的部分,但也是最強的部份抽掉了(XD) 因為他擔心這個說法沒人信... 文後附上 discovery 的說明,看大家相不相信了
 (共八集,請點擊轉跳觀看)



Discovery 讀心術專題報導: (共三集,請點擊轉跳觀看)

2013年2月8日 星期五

Ubuntu 12.10 中文輸入法改用 HIME

趁著年假也把筆電來個大掃除,重新安裝了 VM 上的 Ubuntu。Ubuntu 在安裝時如果選了繁體中文語系,則裝好之後會預設有 ibus + 酷音作為中文輸入法。可是,預設沒有 GUI 設定介面,所以修改設定比要麻煩。原本打算換成 gcin,但突然想到之前吵得很兇的 HIME 姬 (http://hime.luna.com.tw/),就決定來換他了。

Note: 鬧很兇的原因請參考 "HIME INPUT METHOD EDITOR, HIME (姫) 專案,開始!" http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=234&blogId=1

安裝步驟

  1. 先移除 ibus
    $sudo apt-get purge ibus





  2. 安裝 HIME
    $sudo apt-get install hime





  3. 更換預設輸入法框架
    # 命令列直接更改
    $ im-switch -s hime
    # 或由GUI修改
    $ im-switch



  4. 重啟 xwindow 或重開機來改用 HIME

注意事項



  1. HIME 目前在 universe 套件庫中,預設應該是有勾選的,若沒有的話請自己加一下了。

參考資料



  1. http://wiki.ubuntu-tw.org/index.php?title=HIME

  2. http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=234&blogId=1

  3. http://www.ubuntu-tw.com/modules/newbb/viewpost.php?forum=1&viewmode=flat&type=&uid=0&order=ASC&mode=0&start=22630&menumode=1

  4. http://ahhafree.blogspot.tw/2012/05/ubuntu-1204-gcin-hime.html

在 VMware Workstation 上安裝 Mac OS X Mountain Lion(10.8)

前言:我發現每次寫文章如果要寫得很正規,那寫一兩篇就不想寫了(好懶),所以改走隨意風,希望能久一點!

今天心血來潮又回來看一下把 Mac OS X 裝在筆電上的方法。我發現和一兩年前相比,直接安裝或虛擬機安裝步驟都簡化的相當的多,但是,為了方便切換,我還是選擇了嘗試虛擬機的方式,下面會寫一下測試的心得。

注:有興趣直接安裝把 Mac OS X 作為主系統的朋友們可以參考 OSx86 Project (http://www.osx86project.org/) 。發展得還不錯,可以對照一下自己的硬體支不支援,OK的話就能直上了 :)

OK,開始安裝在 VMware 上的方法,不過完整介紹怎麼安裝的發文已經太多了,我就不講了XD。

在測試中,我用的平台是

  • CPU:Intel Core i5-2410M
  • RAM:8G RAM
  • HDD:美光 m4 128G
  • Host OS:Windows 8 企業版
  • Hypervisor:VMware Workstation 9.0.1
  • Guest OS:Apple Mac OS X 10.8 (Mountain Lion)

基本步驟是如下,詳細步驟(包含圖解)請直接參考參考連結1、2和3。

  1. 買一個正版的 Mac OS X 安裝光碟或從 Apple Store 上面下載
  2. 對映像檔做適當的轉檔 (如 dmg2img、dmg2iso,詳情請見參考連結)
  3. 安裝 VMware Workstation (Host 可以在 Windows 或 Linux)
  4. 安裝 Mac OS X Unlocker for VMware (截至本文時,最新版本為 v110,且 VMware Workstation 9 可用)
  5. 建立新的虛擬機,記得啟用虛擬化技術、光碟機改為 SCSI介面、移除軟碟機、勾選 3D 加速。(這些一定要改才能正常 work,另外有一些針對 VMware 的最佳化可以另外做)
  6. 掛載 Mac OS X 映像檔或放入光碟片
  7. 開啟虛擬機,出現安裝畫面;使用硬碟分割工具切割好硬碟後,下一步到底,基本上就裝好囉,聲音、鍵盤、畫面基本上都是正常的。
  8. 下載 darwin.iso 並掛載來安裝 VMware Tools (由v110 或 workstation 9 提供的版本似乎較舊,可以在網上找找有沒有新的),裝好後解析度就能隨視窗大小改變了,雖然功能不是很正常。
  9. ===參考連結做的事到這邊結束===

做到這邊,一切看起來都很正常,連 Youtube 都可以正常撥放 HTML5 影片,但一放大縮小視窗,或招喚出 Lanuchpad 時,整個畫面會變得非常的頓,感覺 3D 加速沒有在工作,但下面的 Dock 卻有半透明特效,一整個不知道是怎樣。

在這邊有幾點可以做的

  1. 參考連結2、3 中有調整一些 VMware 的設定,可以讓整體操作速度快一點,但對於畫面貌似沒有幫助
  2. 參考連結5、6 和 7,不用 VMware Tools 內建的顯卡驅動,改用VMsvga2,這個是有用的,移動畫面比較不會頓,但是對於 Lanuchpad 和視窗全螢幕的動畫還是沒有改善…
  3. 參考連結4 有調整 Mac OS X 本身的設定來加速,例如關閉某些動畫等等,其實這個方法比較實際,我在把絕大多數的動畫關掉後,操作上比較不會感覺到悲劇。內文有推薦一個工具叫 tincktool (http://www.bresink.com/osx/TinkerTool.html) 還滿好用的。
  4. 調整 VM 顯示卡的 RAM 大小,看起來沒用。

結論

可以玩玩,在2D應用中,已經都正常使用了,但距離在裡面玩 3D 遊戲,或炫麗的特效還有很長的距離。如果是想要嘗試超炫特效的,還是嘗試直接安裝 OSx86 或買一台 Apple 的機器吧,其實到現在跟一般 PC 價差也沒那麼大了。

參考連結:

  1. [教程]【独家首发】VMware Station安装最新Mac OS X 10.8 Mountian Lion! http://bbs.weiphone.com/read-htm-tid-5140461.html
  2. VMware 虚拟机安装 Mac OS X Mountain Lion 苹果系统 http://www.ychong.com/mac-os-x-mountain-lion-vmware-workstation/
  3. VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程
    http://unmi.cc/vmware9-install-mac-os-x-mountain-lion
  4. 提高 Mac OS X 速度的 52 个方法! 支持的顶!(转) http://softbbs.pconline.com.cn/10577259.html
  5. Vmware中mac snow leopard蘋果雪豹系統驅動程式安裝方法 http://www.pairsdoll.com/install-drivers-for-mac-snow-leopard-on-vmware.html/
  6. VMsvga2 http://sourceforge.net/projects/vmsvga2/
  7. [solved] Performance Issues with Lion on Workstation 8 http://www.insanelymac.com/forum/topic/268579-solved-performance-issues-with-lion-on-workstation-8/

2012年12月1日 星期六

修復 MySQL InnoDB 資料庫

  前幾天在調整校計中的一個 MySQL 資料庫,主要是讓 Radius 用來做認證和登入紀錄的,每秒鐘就會有上百筆的驗證資料進來,使得其中某些表高達上千萬筆紀錄。

  為了要節省一些空間,準備將舊的備份表刪掉,這個表大約是七千萬筆紀錄,1GB左右的空間,但神奇的事情就從這裡開始,DROP 和 TRUNCATE 都會直接讓 MySQL 崩潰重啟,但是仍然可以做 DELETE,因此就腦袋空空下了 DELETE * FROM xxx WHERE 1,(經過漫長等待),MySQL 開始不斷重開 ........  當 process 一開起來,狀態就轉為 waitsig,然後就重開了。

此時先別慌,先相信資料都還在,只是 InnoDB 的資料表損壞了。在網路找了很久終於找到有幫助的資訊。OK,開始修復

1. 停掉 MySQL,同時停掉所有需要使用此 DB 的程式,避免在備份還原時 DB 過於忙碌

# /usr/local/etc/rc.d/mysql-server stop

2. 備份資料庫目錄,FreeBSD 的 MySQL 放在 /var/db/mysql


# mkdir /var/db/mysql_backup
# cp -R /var/db/mysql/ /var/db/mysql_backup


3. 在 my.conf 內加上 innodb_force_recovery (http://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html)


[mysqld]
innodb_force_recovery = 6 
# 會忽略所有的錯誤強制讓服務可以開起來, 但會忽略所有的 INSERT 和 UPDATE


4. 在安全模式下把 MySQL 開起來,此時應該是可以順利開起來


# mysqld_safe &

5. Dump 所有的資料庫


#mysqldump -u root -p --force --compress -- triggers --routines --events --create-options --all-databases > /var/db/alldb.sql

6. 停掉 MySQL

# /usr/local/etc/rc.d/mysql-server stop

7. 刪除資料庫目錄,FreeBSD 的 MySQL 放在 /var/db/mysql


# rm -rf /var/db/mysql

8. 重建資料庫目錄


# mkdir /var/db/mysql
# chown mysql:mysql /var/db/mysql
# mysql_install_db
# chown -R mysql:mysql /var/db/mysql


9. 在安全模式下把 MySQL 開起來


# mysqld_safe &

10. 匯入資料庫


# mysql -u root < /var/db/alldb.sql

11. 更新 MySQL 權限


# mysqladmin -u root flush-privileges

12. 重新以正常模式開啟 MySQL

# /usr/local/etc/rc.d/mysql-server stop
# /usr/local/etc/rc.d/mysql-server start


13. 祈禱成功開啟來囉



參考資料:
1. 修复 MySQL 数据库 (MyISAM/InnoDB) http://www.2cto.com/database/201203/123765.html
    (此為超級好文)
2. How to recover MySQL data from Innodb? http://egil.biz/how-to-recover-mysql-data-from-innodb/
3. 使用 ibdata 和 frm 文件恢复 MySQL 数据库 http://cnzhx.net/blog/restore-mysql-from-ibdata-and-frm/

2012年11月17日 星期六

修復 Windows 8 "bootmgr is missing"

  最近電腦遭遇硬體問題,在換了主機板之後順便把電腦升級到 Windows 8,不過在幾次系統更新後.....在某一次的重開機...螢幕就黑黑的顯示了 "bootmgr is missing" ... WTF ..


  好險看到這個畫面還不用慌,
  1. 首先把 Windows 8 的光碟放進光碟機,使用光碟開機進入 Windows 8 安裝畫面
  2. 在第二個畫面,也就是選完語言的下一個畫面不要點選"立即安裝",而是選擇左下角的 "修復您的電腦"
  3. 接著畫面會出現三個選項,選擇中間的 "疑難排解"
  4. 同樣會出現三個選項,選擇最下方的 "進階選項"
  5. 這次有四個選項 (越來越多了"),選擇右邊的 "命令提示字元"
  6. 輸入 "bootrec /fixboot 按下 enter
  7. 輸入 "bootrec /fixmbr 按下 enter
  8. 輸入 "bootrec /rebuildbcd 按下 enter,選擇 Y,重建開機選單
  9. 輸入 "exit" 結束命令提示字元,點選 "關閉電腦"
  10. 將電腦重新啟動,重複1-4步驟,點選"自動修復"
  11. 此時畫面上會出現安裝的 Windows 版本,點選後就會自動進行修復
  12. 自動重新開機,順利進入 Windows 8。
※ 注意,使用bootrec 有風險,可以輸入 "bootrec /help" 看一下各選項的用途,再分別執行。Jack 我個人操作時三個都做了才讓自動修復找到 Windows,但或許不需要全部都做。

2012年9月30日 星期日

[演算法] 希爾排序法 Shell Sort

  希爾排序法 (Shell Sort),由Donald Shell 於1959年發明最初版本,這也是此排序法的名稱由來,另外,由於操作方式,又被稱作增量遞減排序排序法 (diminishing increment sort),是插入排序法的一種改進版本。

  原始的插入排序法在插隊的時候需要一個一個比較和交換(或賦值)才能移動到正確位置,希爾排序認為如果一次移動長一點的距離,可以更快完成,例如某序列的最大值在其中一端點,插入排序法可能需要經過 n - 1次的比較和交換才能到另外一點,而若一次檢查1/4 序列長度,只要比較3次就可以了。所以希爾排序法利用不同的增量(步進)進行排序,在逐漸遞減增量,值到增量為1時回復到插入排序法,此時整個序列已經接近排序完成,所以可以以接近O(n)的速度排序完成。

  希爾排序法最重要的就是決定增量遞減的方式,不同的增量方式可以決定最糟狀況下的複雜度,從O(n^2)、O(nlog^2n) 到 O(n^1.5),詳細可以參考英文版的 Wiki,內有不同增量的時間複雜度。在序列不大時甚至有可能比快速排序法快一些。

複雜度:
  • 時間: 最佳 O(n) 最差 O(n^1.5) [增量遞減方式為 3*n+1]
  • 空間: O(n), O(1) 輔助

步驟:
  1. 依照不同的方式先決定最大的增量(步進)值 A。
  2. 以 A 為步進做插入排序法。
  3. 依不同方式遞減 A 的值。
  4. 重複步驟2. 3. 直到 A 小於 1 (A為1時是標準差入排序法)。
  5. 完成排序。

Java 簡單實現:

 
/** 增量遞減方式為 3*n+1 */
public ShellSort {
     public void sort(int[] array) {
          int step = 1;

          // 決定最大增量
          while(step <= array.length/3) {
              step = 3 * step + 1;
          }
          
          while(step > 0) {
               // 進行插入排序法
               for(int i = step; i < array.length; i += step) {
                    int target = array[i];
                    int j = i;
                    while((j > 0) && (array[j - 1] > target)) {
                         array[j - 1] = array[j];
                         j--;
                    }
                    array[j] = target;
               }

               //遞減增量 
               step = (step - 1) / 3;
          }
     }
}


範例:
  以 Wiki 的例子來舉例,有一序列為 [ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],若決定增量為 5, 3, 1,則排序方式會如下:

原始數列,先用5個一列排好比較好理解。
13 14 94 33 82
25 59 94 65 23
45 27 73 25 39
10

以5為增量做插入排序法,可以看到每行都排列好了。
10 14 73 25 23
13 27 94 33 39
25 59 94 65 82
45

 換成3個排一列
10 14 73
25 23 13
27 94 33
39 25 59
94 65 82
45

以3為增量作為排序後
10 14 13
25 23 33
27 25 59
39 65 73
45 94 82
94

最後再以1為增量,也就是進行一般的插入排序法做最後一次排列 (應該是直的,但省空間就橫放囉)
10 14 13 25 23 33 27 25 59 39 65 73 45 94 82 94

排序完成
10 13 14 23 25 25 27 33 39 45 59 65 73 82 94 94
 
範例影片:

參考資料:
  1.  Wiki 希爾排序法
  2. 英文 Wiki Shellsort




[演算法] 氣泡排序法 Bubble Sort

  氣泡排序法是經典的三大 O(n^2) 排序演算法之一,同時他也是三者中最簡單的,大陸翻作「冒泡排序法」,因為他的概念是最大或最小的物件會慢慢地浮到飄到該去的位置。

  氣泡排序法的在不做任何最佳化的狀況下,因為無法判斷數列是否已經排好了,也會傻傻的作O(n^2)次的交換和比較來確保數列排序完成,故最佳狀況也需要 O(n^2)。因此,大多數的氣泡排序都會加上一個旗標(flag)用來判段當一輪的交換完成時是否有任何物件被交換,如果沒有其實就是完成了,可以將最佳狀況變為 O(n)。

  特別要注意的是,氣泡排序法所需要的最壞狀況交換操作次數遠超過選擇排序法跟插入排序法,雖然他們都是 O(n^2),但那是指比較操作加上交換操作的結果。氣泡排序法最糟狀況需要做  n*(n-1)/2 次交換,選擇排序法只要 n - 1 次,插入排序法要(((n-1)^2)/2)/3 次,都會比氣泡排序法德有效率。因此,氣泡排序法只適用在非常少量的數據,一般不太會用到 (但他就是簡單)。

複雜度:
  • 時間:最佳 O(n)  [使用 flag] 最差 O(n^2)
  • 空間:O(n), O(1) 輔助用

步驟:
  1. 將序列式為兩段,已排序和未排序,一開始整個序列都屬於未排序。
  2. 從未排序頭比較相鄰兩物件,若前者較大(小)就交換他們。
  3. 不斷向後比較、交換直到未排序序列的最後一個物件。此時未排序序列中最大或最小的物件會被成為已排序序列的頭。
  4. 重複 n*(n -1)/2 次,直到所有物件都進入已排序序列。

Java 簡單實現:

public class BubbleSort {
     public void sort(int[] array) {
          // 未排序序列的尾
          for(int i = array.length - 1; i > 0; --i) {
               // 交換整個未排列序列
               for(int j = 0; j < i ; ++j) {
                    if(array[j] > array[j+1]) {
                         int tmp = array[j];
                         array[j] = array[j + 1];
                         array[j + 1] = tmp;
                    }
               }
          }
     }
}
Flag 最佳化版本:
public class BubbleSort {
     public void sort(int[] array) {
          // 未排序序列的尾
          for(int i = array.length - 1; i > 0; --i) {
               boolean isChange = false;
               // 交換整個未排列序列
               for(int j = 0; j < i ; ++j) {
                    if(array[j] > array[j+1]) {
                         int tmp = array[j];
                         array[j] = array[j + 1];
                         array[j + 1] = tmp;
                         isChange = true;
                    }
               }
               // 都沒有交換到東西就排序完成
               if( ! isChange) {
                   break;
               }
          }
     }
}

範例影片:
參考資料:

2012年9月29日 星期六

[演算法] 選擇排序法 Selection Sort

  選擇排序法是經典的三大 O(n^2) 排序演算法之一。所謂的「選擇」是要在未排列序列中最小(大)的物件,將其放置到已排列序列的末端。(一個序列可分為兩段,已排序和未排序),重複此動作最後就能完成排序。

  雖然會說選擇排序法有一個優點是最壞狀況的「交換」次數是 n - 1 次,在交換位置的時間比比較大得多的情況下,故若數列接近反序,選擇排序法會比冒泡排序法跟選擇排序法來得有效率,但實際上在實作時是錯的。由於尋找最小值時就會不斷需要記住最小值的索引,會一直進行賦值操作,故在實際使用上(測試過整數完全反序數列排序),插入排序法效率遠比選擇排序法來得高。

複雜度:
  • 時間:最佳 O(n^2) 最差 O(n^2)
  • 空間:O(n), O(1) 輔助

步驟:
  1. 將序列視為兩段,已排序和未排序,一開始整個數列都算未排序。
  2. 從未排序序列的頭開始向後尋找最大(小)的物件。
  3. 將其與未排序數列的頭交換 (也就是將這個物件放到已排序數列的尾端)。
  4. 重複此步驟2~3,直到整個數列都變成已排序數列。
Java 簡單實現:

public class SelectionSort {
     public void sort(int[] array) {
          // 未排序數列的頭
          for(int i = 0; i < array.length; ++i) { 
               int min = i;
               // 向後找最大(小)
               for(int j = i + 1; j < array.length; ++j) {  
                    if(array[j] < array[min]) {
                         min = j;
                    }
               }
               // 和頭交換
               int tmp = array[i];
               array[i] = array[min];
               array[min] = tmp;
          }
     }
}

範例影片:

參考資料:

[演算法] 插入排序法 Insertion Sort

  插入排序法是經典的三大 O(n^2) 排序演算法之一。與其叫他「插入演算法」,不如叫他「插隊演算法」更能表達其運作原理,可以想像做一個未排序的物件(人?)隊伍,從頭開始,每個物件都有一次機會向前插隊到它該去的位置。

  插入排序法最佳狀況下(已排序好數列),只需要掃描一遍就可以結束,故 O(n) ,但最差狀況需要做 n*(n-1)/2 - (n-1) 次的賦值,。但是,插入排序法在處理少量數據的能力平均來說是三大O(n^2)排序演算法中最佳的,部分快速排序法到最後也是用插入排序法排少量的數據,是一定要當常識記得的演算法之一 (XD)。

複雜度:
  • 時間:最佳 O(n) 最差 O(n^2)
  • 空間:O(n), O(1) 輔助用
步驟:
  1. 第一個物件當作已經排序好。
  2. 向後逐一取出物件,並從該物件開始向前掃描其他物件。
  3. 若前一個物件大於(小於)此物件,兩者對調位置。 (在實作上使用賦值而不對調)
  4. 重複步驟3. 一直交換到前一個物件不再大於(小於)此物件。
  5. 重複步驟2. 從原位置繼續看下一個物件。 
Java 簡單實現:
public class InsertionSort {
    public void sort(int[] array) {
        // 一個一個看
        for(int i=0; i < array.length; ++i) {
            int target = array[i];
            int j = i;
            // 向前檢查 (插隊)
            while((j > 0) && (array[j - 1] > target)) { 
                array[j] = array[j - 1];
                j--;
            }
            array[j] = target;
        }
    }
}


範例影片:

 參考資料:
  1. Wiki 選擇排序法

2012年9月23日 星期日

安裝 Gliffy Atlassian Confluence plugin 失敗

  Gliffy (http://www.gliffy.com/) 是一個相當令人驚豔的線上製圖應用程式,功能和 Microsoft Visio 差不多,但能畫出遠比 Visio 好看的圖形。Gliffy 同時也有針對 Atlassian Confluensse / JIRA (http://www.atlassian.com) 推出 Plugin。

  為了要可以離線使用這項強大的工具,最近正在安裝 Confluence + Gliffy plugin 看看是不是符合需求,但首次安裝就不太順利,出現以下錯誤訊息。


Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (20833751 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3250)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1940)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2693)

  提示很清楚是 MySQL 所允許的 Query 封包大小不夠產生的,但到底要把這個值調多大呢? 在試過很多次之後發現答案其實還滿誇張的,那就是: 比插件的 .jar 檔大。推測 Confluence 是將整個 plugin 放到資料庫內,但為什麼要這麼做就不得而知了。

在簡單寫一下解法:
修改 my.ini 將max_allowed_packet 值設為20MB以上,如:
max_allowed_packet = 32MB

2012年9月9日 星期日

SCIgen Paper 產生器

  SCIgen 是一個在 2005 年由 MIT 著名的人工智慧實驗室三位學生合力寫出來的程式,透過一組寫好的 CFG, Context-Free Grammar,可以自動產生一篇符合常見格式的 Paper,包含內容、圖、表格、參考文獻等等。我也自己試著產生了一篇《Deconstructing B-Trees Using Chimaera》 乍看之下整個還滿專業的,哈哈。

  這三位學生也用 SCIgen 產生的 Paper ,向許多當時知名的 Conference 投稿。最著名的例子就是 WMSCI 2005  接受了其中一篇,這也是他們的初試,馬上讓 WMSCI 隔年失去了 IEEE 的贊助。不知道他們寫這隻程式從一開始就是為了要愚弄 (提醒大眾?) 某些不管 Paper 品質的 Conference,或是一開始只是玩笑,而經過記者的美化。但總之,可以知道的是,MIT 的人工智慧實驗室真是不斷地秉持 Hacker 精神在做研究和開發程式阿,希望我們 LAB 也能培養成這樣的風氣 (正在努力)。

   SCIgen,這隻程式隨然沒辦法拿來幫忙研究生提早畢業,但從中間也能看到一些可以發展的價值,不知道 MIT 有沒有進行後續的研究。SCIgen 的 CFG 提供了一片論文相當好的框架,若有隻程式能夠透過自動的摘要、統計分析等動作,將研究者針對主題所撰寫的文章、實驗數據轉換為一篇 Paper,對於研究者來說其實是相當便利的動作。當然啦,寫作本來就是研究者應盡的義務,讓後人可以踩著你的研究成果繼續努力,就算真有這樣的程式出現,他也只能被當作一個框架、一個幫助摘要、格式化的工具,而不可能取代人腦的工作。


一個正在默默努力的研究生

Jack Yu

2012年9月8日 星期六

閱讀心得:為什麼有錢人都用長皮夾?

《為什麼有錢人都用長皮夾?年收入200倍法則!改變25萬人的錢包增值術!》

博客來連結: http://www.books.com.tw/exep/prod/booksfile.php?item=0010553142

  這次回家剛好愛買書的老媽買了這本書就拿來翻翻看,會不會只要換個錢包,錢就自己已直跑來呢? 想太多,當然不會 XD。但作者仍在書中提到一些值得去思考與實踐的事情,留下來給自己做一些紀錄。本書共分三個部分,錢包、錢的分類以及態度。

錢包

錢包是錢與人的橋樑,作者認為從一個人的錢包就可以知道一個人對於錢的態度,如果錢包總是亂七八糟,塞滿折價券、會員卡,裡面的紙鈔破舊、沒有排列,雖然不太表著這個人覺得錢不重要,而是沒有認真地去注意、關心錢的使用。所以並不是靠著神奇力量,換長皮夾就能夠帶來 200 倍的年收入,而是靠著 (這很有趣) 去關心錢過的舒不舒服,就能更加關注錢的使用,作者也提出了幾個能讓錢過得舒服的方式:
  1. 使用長皮夾。一來錢不會被折到,二來因為皮夾大就不容易放到口袋,而被坐在屁股下面。
  2. 每天整理錢包,不要讓錢包鼓鼓的。 
  3. 紙鈔要朝同一面排放整齊。頭朝下表示你希望錢不容易出去,頭朝上則代表你希望錢能有流動。 (後者才會促進經濟發展喔!)
  4. 結帳使用新鈔。使用新鈔除了讓收錢的人開心之外,他也給人一種你對錢是有在注意的人。
  5. 遞錢時態度要小心。好,這不是怕錢掉下去會痛。主要也是希望收錢的人能夠開心。
  6. 心裡對錢說「一路小心」、「歡迎回來」。這除了非科學的部分,主要ˋ目的是在提醒自己正在動用金錢,而近一步的多做考慮。
  7. 使用不太便宜的錢包。 作者多年觀察到許多成功的有錢企業家的年收入,大約就等於錢包的價錢 x 200,例如使用 5 萬元的錢包,年收入就會是一千萬! 其實雖然不太相信這樣的數據,但透過一個不太便宜的錢包,也能讓人注意到錢的重要性。

錢的分類  

錢的使用可以被分為三類:消費、投資和浪費。
  1. 消費代表著可以立即可以獲得等值的回報,如買食物。
  2. 投資代表著在未來可以得到回報,如買書。
  3. 浪費代表著不會獲得回報,如打電動等。
無論如何,應該盡可能的讓所有錢的使用成為投資的類型,例如光是吃東西就能夠試著去思考,要如何吃才能讓自己吃得健康,而讓只是為了果腹的消費轉為獲得健康的投資。

態度

這部分是最趨近於立志類型的部分,但還是有很多值得思考的事情。
  1. 不要成為「守財奴」,正面思考,不要只想著錢還剩下多少,而是思考還有多少錢,如此一來才能進一步地去思考如何充分運用這些錢。透過這樣的思考在面對突如其來的金錢問題時,也要不容易慌張。
  2. 成為控制錢的人,不要為了特價就衝動購買。 (這個好難)
  3. 不要為了省錢購買廉價品 => 購賣高價品。 這個規則在近年來自己體會非常明顯,最近的廠商 cost down 到一種境界後產品的品質和耐用度都大幅度的下降,為了不要製造不必要的麻煩、獲得好的服務以及同時讓自己有意識地注意要愛惜這個產品,在同產品中,購買中價位以上的產品能獲得不錯的效果。 (甚至一次攻頂)
  4. 少殺價。看起來也是個奇怪的觀念,但作者要說的不是讓商人多賺點,而是希望在買方、賣方、社會三者間找到一個正向的平衡。

2012年9月4日 星期二

HTC One X Bootloader 解鎖 (unlock)

  Bootloader 是開機第一個執行的程式,用來將作業系統 (在 One X 上也就是 Android) 跑起來,同時也提供一些相當底層的操作,例如燒錄 ROM 等功能。以 One X 來說你想要刷入 Recovery 模式、刷第三方 ROM、取得 Root等動作都需要解鎖 Bootloader,但HTC 和多數的大廠為了確保使用者不要不小心按一按就把手機搞壞了,所以一般來說 Bootloader 是被鎖住的,但也有進階使用者認為 Android 手機就是應該提供使用者最大的自由度才對,所以 HTC 也有順應民意提供官方的 Bootloader 解所可以使用。

  但特別要注意一件事, HTC 的保固政策,解鎖會失去原廠的保固,且目前沒有任何重新回復到原本狀態的方法(看不出來有解鎖過)。所以建議大家三思過後再決定是否要解鎖。

<<三思三思>>

OK,若你決定要繼續解鎖,就繼續往下看吧。

※ 在還沒開始走官方解鎖步驟前,你可以到最後面的參考資料第三項,有一鍵全自動解鎖程式可以使用,他將官方的步驟進行包裝,會自動下載驅動、需要的程式、而且會自動解鎖,所以幾乎什麼事都不用做了,但是要注意的是,使用它會拿不到解鎖過程中會產生的檔案,若之後有問題會難救回來,還是走官方流程會好一點喔。 (反正這個步驟應該只會做一次)

事前準備:

1. 安裝 HTC Sync (點我去下載),這樣電腦才有驅動程式能順利抓到手機。
2. 安裝 Java Runtime (點我去下載),Android 的 SDK Manager 需要 JRE 才能執行。
3. 安裝 Android SDK(點我去下載),取得和手機溝通的程式。安裝好後開啟 Android SDK Manager,除了預設設全部勾選的 "Android 4.1 (API 16)" 之外,在將第一項 "Tools" 打勾。 並點選 "Install" 進行安裝,這需要一點時間。
   
4. 備份好所有個人資料,解鎖會重設手機到出廠狀態,所有資料都會不見。

官方解鎖步驟:

1.  來到 HTC 開發者網頁 http://www.htcdev.com/,並在右上角進行登入,如果你沒有帳號就註冊一個吧,注意 email 務必要填對,不然會收不到解鎖用的檔案。

2. 點選 "Unlock Bootloader" 分類,然後點選 "Get Start"。

3.右側下拉選單選擇使用的型號,One X 在這邊是選擇 "All Other Supported Models",按下 "Begin Unlock Bootloader"。

4.解鎖會喪失保固你確定嗎? "Yes" 繼續。 (還是看一下才能保護自己的權益)

5. 把兩個勾勾都打勾確定你清楚風險了,接著就點選按鈕開始看官方教學流程。
  

6. 這頁的步驟要目的是讓手機進入到 Bootloader 的操作模式,One X 屬於不能拆電池的機種,所以有兩個方法可進到 Bootloader ,擇一使用 (其實兩個是一樣的東西)。
     a. 重新開機,並在重開機過程中按住 "音量鍵↓"。
     b. 關機後,先按住 "音量鍵↓",然後按電源鍵開機。 
成功進入後會看到手機上出現白白一堆英文的介面,使用音量鍵 ↑、↓  移動光標選住 "Fastboot",並按下電源鍵進入 "Fastboot"。最後再將 USB 線插上跟電腦連線就完成了這頁的步驟,點選 " Processd To Step 5" 繼續看教學。

7. 在事前準備我們已經抓好了 Android SDK,現在需要從裡面找到我們要的程式。先在任意地方建立一個資料夾 (如 "C:\Android"),接著從 Android SDK 的安裝目錄下 (像我的在 "C:\Program Files (x86)\Android\android-sdk\"),複製 ".\platform-tools\adb.exe"、".\platform-tools\adbWinApi.dll"  到 "C:\Android"。另一個我們需要的檔案在最新版的 SDK 中已經不提供了,所以從舊版的來取得 android-sdk_r13-windows.zip (點我下載) ,解壓縮其中 ".\android-sdk-windows\tools\fastboot.exe" 到 "C:\Android",所以 "C:\Android" 會有三個檔案在內。


 8. 當檔案都準備好之後要從命令提示字元來執行這些指令,按快速鍵 Win+R 將執行視窗叫出來,並輸入 "cmd" 開啟命令提示字元。並輸入 "cd c:\Android" 切換到剛剛準備好的目錄。這是這頁的最後一個步驟,點選 "Proceed To Step 8" 繼續看教學。

9. 在命令提示字元輸入 "fastboot oem get_identifier_token" 取得 One X 上 Bootloader 的身分序列 (每一台都不一樣)。


10. 稍微等一下後就會出現,從 Bootloader 顯示的資訊。點選右鍵,選擇"標記"後用滑鼠把"<<<< Identifier Token Start >>>" 到 "<<<<< Identifier Token End >>>>>" 選起來,並按下 "Enter" 將這些內容複製到剪貼簿。 (命令提示字元不要關,等等還要用)

11. 將剛剛複製的內容貼到對話框中,並按下 "Submit",接著就可以去信箱收 HTC 寄來的解鎖檔案。

12. 檔案是寄到我的 Gmail 信箱,將這個檔案下載到剛剛的資料夾 ("C:\Android")。

13. 在命令提示字元輸入 "fastboot flash unlocktoken Unlock_code.bin" 將收到的解鎖檔案燒錄到手機上。

14. 這時手機的畫面會變成下圖,若已經三思確定要解鎖了就選擇 "Yes" 這樣手機就會重開機進行解鎖動作 (注意手機會重設到出廠狀態);若反悔了,就選擇 "No" 手機會重開機並..什麼事都沒發生。

 15. 好啦,恭喜已經解鎖 Bootloader 了,其他更進階的應用會在之後的文章繼續說。 :)


參考資料:
  1. 【教學】HTC One X Root 機教學(含解鎖Bootloader)
  2.  <<教學文>>ONE X 官方解鎖 ROOT 全教學
  3.  小白不是障礙!!HTC One X一鍵官方解鎖和上鎖工具寶典!!