2013年10月18日 星期五

[Linux] 修正 wget 下載檔案名字 @ Ubuntu 12.04

常用 wget 下載檔案,但碰到一些會做重導的網頁或是檔名是在 HTTP HEAD 時,用瀏覽器下載可以正確取得檔名,但用 wget 只會看網址。修正方式只是叫 wget 去相信 server 回傳的檔名而已。某個角度來說,wget 預設不這樣做或許有安全性的考量?

例如下載 Ubuntu 64-bit Server LTS ISO 檔:

$ wget 'http://www.ubuntu.com/start-download?distro=server&bits=64&release=lts'
...
HTTP request sent, awaiting response... 200 OK
Length: 697303040 (665M) [application/octet-stream]
Saving to: `start-download?distro=server&bits=64&release=lts'
...


加上 --trust-server-names:

$ wget --trust-server-names 'http://www.ubuntu.com/start-download?distro=server&bits=64&release=lts'
...
HTTP request sent, awaiting response... 200 OK
Length: 697303040 (665M) [application/octet-stream]
Saving to: `ubuntu-12.04.3-server-amd64.iso'
...

2013年10月15日 星期二

[Python] urlib2 設定 User-Agent (偶爾可解掉 urllib2.HTTPError: HTTP Error 403: Forbidden )

雖然造成 403: Forbidden 的因素有很多,但有一種是網站不想讓 crawler 抓資料,但 User-agent 設定完就能解掉,所以此例拿來記錄 urllib2 設定 User-Agent 的過程(盡量先不請 pycurl 出來 XD)。

原本用法:

obj = urllib2.urlopen('http://www.google.com/')

加入 User-Agent 用法:

obj = urllib2.urlopen( urllib2.Request( 'http://www.google.com/' , None , { 'User-Agent' : 'Mozilla/5.0' } ) )

另外紀錄一下 wget 用法:

$ wget -U 'Mozilla/5.0' http://www.google.com

2013年10月11日 星期五

[Linux] 使用 redir 做 port forwarding 與設定開機啓動 @ Ubuntu 12.04

最近又在一台擁有 public ip 的強悍機器上架 VM 了,暫時是用 Ubuntu 12.04 desktop 跑 VirtualBox 來用,所以就碰到如何從外頭連進去的需求,就裝裝 redir 來用吧!
$ sudo apt-get install redir
舉例來說,將 Host OS 的 20022 port 導向到 Guest OS 的 22 port,讓人可以從外頭來進去:
$ /usr/bin/redir --lport=20022 --caddr=192.168.56.101 --cport=22
設成開機啓動:
$ sudo vim /etc/init.d/vbox-port-forwarding.sh
#!/bin/sh

# port forwarding
/usr/bin/redir --lport=20022 --caddr=192.168.56.101 --cport=22 &

$ sudo chmod 755 /etc/init.d/vbox-port-forwarding.sh
$ sudo update-rc.d -f vbox-port-forwarding.sh defaults

2013年10月8日 星期二

安裝 Eclipse 與 Eclipse CDT 支援 C/C++ Project 開發與偵錯 @ Ubuntu 12.04 Desktop

前輩詢問在 Ubuntu 上頭有沒合適的 GUI Debug 方式,我想了很久,實在是我連 gdb 都不常用,學生時代土法煉鋼的 printf 就夠我解決九成問題,此不便的 debug 方式,會讓人謹記教訓,也有訓練記憶之功用? 只能說我接觸的 Project 還不夠大吧 :P 我有印象第一次真的去用 gdb 是因為我寫了類似很多層 struct 的情況。

開始還在想要不要請前輩用 gdb -tui ,所幸還有想到 Eclipse 啦。廢話不多說,來個圖文教學吧。

安裝 Eclipse CDT:

由於 Ubuntu 12.04 裝完的 Eclipse 是 INDIGO 3.7.2 版本,所以在 Eclipse -> Help -> Install New Sotfware 那邊,把 Work with 填入 http://download.eclipse.org/tools/cdt/releases/indigo  (更多選擇請參考 http://www.eclipse.org/cdt/downloads.php)

Ubuntu 12.04 Eclipse install CDT 1

接著偷懶全選,然後就會出現問題 Orz 接著去掉重複項目的舊版、去掉仍有問題的項目,最後就可以安裝了。

Ubuntu 12.04 Eclipse install CDT 2

理當來個 Hello World 範例:

Ubuntu 12.04 Eclipse New C++ Project

Ubuntu 12.04 Eclipse New C++ Project 2

Ubuntu 12.04 Eclipse New C++ Project 3

Ubuntu 12.04 Eclipse New C++ Project 4

Ubuntu 12.04 Eclipse New C++ Project 5

Ubuntu 12.04 Eclipse New C++ Project 6

Ubuntu 12.04 Eclipse New C++ Project 7

Ubuntu 12.04 Eclipse New C++ Project 8

Ubuntu 12.04 Eclipse New C++ Project 9

Ubuntu 12.04 Eclipse New C++ Project 10

再補一個 Debug 流程:

Ubuntu 12.04 Eclipse C++ Project Debug 1

Ubuntu 12.04 Eclipse C++ Project Debug 2

Ubuntu 12.04 Eclipse C++ Project Debug 3

Ubuntu 12.04 Eclipse C++ Project Debug 4

Ubuntu 12.04 Eclipse C++ Project Debug 5

Ubuntu 12.04 Eclipse C++ Project Debug 6

Ubuntu 12.04 Eclipse C++ Project Debug 7

2013年10月5日 星期六

Mac mini (Late 2009) 更換硬碟

macmini2009late_hd_upgrade_01

幾個月前,某台 Windows 筆電開機一直會找不到硬碟,那時擔心硬碟快壞了,所以買了一顆新硬碟來用,卻發現沒有解決現象,只能猜測單純房間溫度過高吧 XD 於是,多了一顆 500GB 硬碟,就替 2010 年買的 Mac mini 替換一下,拆機後才發現這台才 160GB 而耶,真股奇妙的感覺:Mac mini(2009 年末)- 技術規格

翻翻三年前替它更換記憶體的文章(Mac mini 拆殼 + 更換記憶體),不再像以前那般小心翼翼,單純用一隻鐵尺從後面面板那拆機,不用幾分鐘就拆好外殼了 XD

macmini2009late_hd_upgrade_02

我記得以前查看資料時,發現換硬碟會比較麻煩,但仔細看一下機構,卻也不見得要拆很多東西,算起來是偷吃步的拆法,比換記憶體多拆了 4 棵螺絲而已 :P 拆完鎖硬碟的螺絲後,再透過摩擦力貼著硬碟輕輕往後拉,就可以拆下硬碟,隨機構的設計退出來,再更換硬碟後,傾斜機構讓硬碟插槽可以對好,就可以輕推裝好了。

macmini2009late_hd_upgrade_03

macmini2009late_hd_upgrade_04