2017/11/03
[+/-] : Backblaze restore refund
每次硬碟一壞 就痛很久 搞資料救援 掃描什麼的實在是很煩
從四五年前開始 就買了online backup的service
一開始購買了 Crash Plan 之後又續費買了 4 year plan 記得是一個月不到 $3 蠻便宜的
不過續費完就開始漲價 只剩下 1 year plan 而且價格跟 backblaze一樣
還在想之後要怎麼辦 它又漲價 變得比 backblaze 還貴
我就連 Blackblaze也刷下去了 ....
所以有大約兩年時間 是同時兩套都有裝
但是由於上傳速度實在太慢 Crashplan 平常看大約都250KB/s上傳 有時只有 70KB/s
Backblaze 也大約只有 400KB/s 實在很慘 備份不完...
所以去年又組了一台 NAS 也放一份local的備份
設定來說 Backblaze 比 CrashPlan簡單太多了
而且 CrashPlan是用Java寫的 有著各種奇奇怪怪的bug
我電腦照片圖檔類的零碎檔案很多 CrashPlan在建index時 就會耗費大量記憶體
多到要去修改Xmx參數到4G才不會當機 而且每次升版就要手動改一次...
好了 以上種種抱怨也不會在遇到了 因為CrashPlan for Home要收攤了
只剩下 for Business 漲到一個月 $10 所以等四年到期後 就剩下Backblaze跟 NAS了
以上是前言 都不是重點
重點就是硬碟壞了 而且是無聲無息的那種
SMART紀錄一切正常 然後有一次重開機就再也讀不到了 (有常駐 CrystalDiskInfo)
馬達有轉 但是bios就是認不到 使用外接殼 或是轉USB的線材也無法識別
可能是chip掛了 ??
是 WD紅標 3T硬碟 剛過保 2個月
這顆內容 就剛好是沒有要放進NAS的 有用 CrashPlan/Backblaze 備份
但是都沒有全上傳完成 各種髒話都飆出來了....
其他硬碟大多是遇到 先少量壞軌 然後才漸漸死亡
有些甚至壞軌後 我手動分割磁區將它避開 還能繼續用
雖然壞軌使用 low level format也救不回來 但是那幾顆硬碟就是沒被操掛 還能用 ^_^
遇到兩次直接死亡的都是 WD 的 幾年前有顆 綠標1.5T 也是 (年少不懂事)
已經使用過 WDidle3修改 也確認過 C1沒有飆昇 還是過保後瞬掛
多年後 用了紅標還是遇到....
手上還有兩顆紅標4T 給NAS的 其中一顆也壞軌過 在保固內 直接去光華換新的
幸好NAS 是建Raid6 不怕不怕
總之這顆掛了 不會救
買了好多年的 data online backup service 終於派上用場
就來試用一下 restore 功能吧
這時候 反而 CrashPlan 界面好用多了
因為是走Zero-Knowledge encryption (它號稱) 我Key也是本地端only
它無須在網頁中處理 直接軟體選擇要 restore的目錄後 選擇要存放的位置
它就開始下載了 自動續傳 但是下載中無法在進行備份 要等下載完
我總共選了約 700GB檔案 很快就下載完 不到1星期(每天開電腦約8-12HR)
下載速度比上傳快多了 而且選擇的檔案都有下來 也都正確
反觀Backblaze
Restore只能從網頁上點選
原本的Zero-Knowledge encryption 也變成要提供Key才能restore 不就變得不安全了 什麼爛設計
他的Restore 免費版 是點選檔案後 它會壓縮成zip 然後提供你使用網頁下載
重點是ZIP沒有加密...
然後他有提供一個小工具可以不用開網頁下載
但是每次都只能下載一個檔案 每次都要重新登入 而且開multi-thread有些奇怪的bug
總之就是不好用
而且會漏檔案 不確定是上傳沒有完整 還是多國語言某些字元不支援
每次點選目錄大約50GB 壓縮完都會只剩下2xGB可以下載
如果單獨點選那些會漏的檔案要打包成restore zip 他的網頁會顯示pending
然後一直timeout 然後會狂送mail來 說出問題了 XD
我覺的是他們的cloud server 因為更換硬碟等關係或是架構特別
造成只剩下index 但是內容掉了
下載不好用 但是它還有另外一種 restore服務 就是放到隨身碟中 直接寄到你家
有兩種方案 USB Flash Drive 最多 128GB $99
USB Hard Drive 最多4TB $189
我選了整顆硬碟有備份的大約 1.3TB $189給它刷下去
大約等了一個禮拜 他的網頁會顯示建立完成 但是只剩下8百多GB(就是漏了一堆檔案)
上面會有一組密碼 是解密USB Hard Drive 用的
大約再過2天 我就收到了 FedEX寄來的包裹
超快 但是要加收海關課的營業稅5% 三百多塊台幣...
收到的是 WD My Passport 1TB 的硬碟 但是是 Backblaze自己的盒子
還蠻簡單的包裝 只有紙盒蓋著 裡面就海綿墊跟硬碟 沒有塑膠封套
使用很簡單 就是WB有內建一套軟體
輸入密碼後 才會把硬碟mount上去 就是沒有加密的檔案狀態
趕快把它複製回來
收到的硬碟如果想留著也可以 只是很貴而已
現在有提供一個服務可以退費 Restore Return Refund program
就是這篇的標題...
只要30天內把它寄回去就好 可以全額退費
因為30天綽綽有餘 就不用FedEX DHL UPS這種貴鬆鬆的
用郵局就好 約 7-14天到 也不需要用國際快捷
本來是選國際航空包裹 0.5公斤才 220
但拿去郵局 櫃台給我選國際掛號函件
箱子 15+ 資費 268
我 10/17號寄出 10/26號刷退
所以這次 restore 就是總共花了 6百多新台幣 稅+郵資 還有信用卡的匯損
(海關代課的營業稅是不能退的 如果是營業單位 可以抵稅 個人用戶好像完全不能 找不到可已扣抵的文件)
然後救回了約 1.5T資料 搞了一個多禮拜
最後 還要花錢買一顆新硬碟 還是很麻煩
ps.這是我可以get free month的邀請連結
https://secure.backblaze.com/r/01guus
2017/08/12
[+/-] : todo list 2017末
之前寫的GAE 案子 l1, sfilec 還有一些自己用的小工具
最近發現全部都被google刪除了
似乎是搬遷到 Google Cloud Platform 後政策有所改變
code也太久沒有維護 可能沒法遷移到新架構?
反正之前因為搬遷 SVN/Git都不見了 也沒source可以改了
倒是openshift還活著好好的 有空重寫改到 openshift上吧(也不知何年何月了)
反正google對於不會賺錢的產品總是一直關閉
之前放在google code上的project也早都被收掉了
這裡blogger不知道還能撐多久
blogger自訂網域上線許久 一直不能新增https的憑證
預計改為使用CloudFlare 也順便將整個DNS代管也搬遷過來
不知道免費的好不好用 後續是不是會跟google全部都要收費了呢
還有domain也快到期了 由於godaddy漲價 也要順便搬家
blog的template 因為太懶的維護
也預計要改回blogger內建的就好 其他模組盡量移除
只是原本有些script是用來隱藏內容的 變成永遠開不了啦
總之能多簡單就多簡單吧
2015/02/05
[+/-] : [Note]"Google Play 服務發生不明問題" 處理
或是使用 Titanium Backup全App還原後
發生 Gmail 開啟時顯示
"Google Play 服務發生不明問題"
並且直接退出無法使用
Google Music 與 Google 日曆雖然可以使用
但也會出現 錯誤訊息
同時 帳號同步頁面也顯示 Gmail / 日曆同步異常 無法同步
重新安裝 Gmail / Google日曆 / Google Music
皆無效, Gmail雖然不在閃退 但也無法收信一片空白
登出 Google帳號 清除全部Google相關App的資料與快取
再重新登入, 也無效
網路搜尋 有其他人遇到類似問題
是等到 Google Play 服務更新後 自然解決
所以重裝Google Play 服務 才是正解
又偏偏他是系統App無法直接解除安裝
但是可以還原舊版
到系統->應用程式 中 選擇 Google Play服務
進入 Google Play 重新更新 Google Play服務到最新版本
回到同步頁面 取消Gmail同步在重新勾選 這是就看到他很忙碌的轉圈圈
最後 開啟 Gmail後是正常的啦
2013/08/16
[+/-] : [Note] Free VPN / SSH Tunnel
本來是在家中架個 SSH Server
配合 GoAgent 分流使用...
另外有些軟體 是沒辦法設Proxy或是設了沒用的
在配合 Widecap 做強制的設定 Tunnel
但還是蠻多軟體會出問題 也好像會影響電腦效能...
像是以前MSN還在的時候
設定Proxy 他還是會偷偷開socket直接連線 非得用防火牆封死
設Widecap 又三不五時Hand住
所以就要改用VPN來解決問題
但是又有些軟體 是只能走實體網路的 不能過VPN
就變得很麻煩 軟體要開開關關的...
再加上家裡網路又常常斷線, Cable modem死當, 或是DHCP要不到IP等等問題...
打電話去 也只是遠端從開 Cable modem 過幾小時又死一次...
要不是家裡太偏遠 只有凱擘一家 沒光世代可遷 不然就...
所以現在就用 vbox 開VM
然後再VM中裝上 Free的 VPN使用
並且裝上SSH Server提供Tunnel
外面其他電腦 裝SSH Client 連VM來當作 Proxy
不能設 Proxy的就直接把軟體裝在VM中 走VPN吧
FreeVPN 有試過以下幾家的 由於免費的關係 各有流量限制 或是廣告
雖然有些麻煩 不過分散流量 分散風險 就給他全裝了 看心情開不同連線啦
- 1. SecurityKiss 單日300MB 裝軟體免申請帳號, 或是申請帳號免裝軟體 或是使用OpenVPN 免費的Server有13台 速度不一
- 2. Hotspot Shield 單月3G 裝軟體免申請帳號, 有煩人訊息 慢
- 3. CyberGhost 限制未知(另每N小時斷線1次) 要裝軟體 並申請帳號 有強制廣告 慢
- 4. proXPN 流量限制300kbps 要裝軟體要申請帳號 速度極慢 而且有很多網站連不上 有煩人訊息
- 5. OkayFreedom 500MB/月 要裝軟體要申請帳號 速度還OK
- 6. Private Tunnel 100MB/月 要申請帳號要裝軟體 免費流量太少 略慢
- 7. VPNReactor 要申請帳號免裝軟體(PPTP/OpenVPN/...) 但免費帳號只有PPTP 但VBOX的VPN passthrough有問題 連不上就沒試了 不過在手機上使用正常
- 8. VPNBook 非商業 靠贊助的 免安裝免申請(PPTP/OpenVPN)
- 9. Tenacy 沒試 因為網頁很慢所以不想試
- 10. VPNGate 非商業 日本學術研究建立的 提共各地志願者建立的Server List, 可安裝軟體 SoftEther VPN 或是上網頁看列表 (裝軟體後很方便) 速度不一不定時斷線 畢竟是各地志願者免費提供的Server
2011/10/19
[+/-] : Jostudio.net domain
雖然沒啥在用 不過還有Google App在
也還有這個很久沒更新的blog XD
雖然久沒更新 不過流量還不錯說
趁過期前 趕快先把網域轉到godaddy去
原本在yahoo是特價時候買的 (遙想久遠的過去...)
不過renew的價格實在太貴
還是godaddy實惠一點 一年不到8美元
因為續約了 沒啥意外的話 這個blog還可以活個幾年XD
2009/10/03
[+/-] : Zooomr 與 Picasa....
9月份以後的相簿先放在這裡
等買空間之後 再補上傳回原本的相簿上
不過之後的相簿就多半傳小圖上去-最大1024 pixel 省著點用吧...
以後大圖就丟到 Zooomr 的空間中 最大設2000pix
剛好是相機 4000x3000的50% 因為相機雜訊不少 傳太大上去也沒用
Zooomr 還不錯的是 有無限空間 不限制尺寸 功能也不少
不過廣告很多 上傳工具相當不好用 用起來也不順手 看大圖不太方便
有些時候系統會不太穩定 常出現"This Page was Not Found" 要多試幾次
而且有個不良紀錄 早期第一版升級第二版時 就把我的相片全都砍了...
不知道下一次改版後 圖還會不會留著... 不過就當備份相簿用也還不錯
2009/04/03
[+/-] : GAE : Small File Cache
提共放置檔案暫存在GAE上,並提供下載... 且分成幾種暫存模式
但是受到GAE資料庫的限制 檔案只能存放1MB以內
所以另外做了一個10MB的版本 由於現在Python的runtime處理限制
最大也只能作到10MB 在 10 Mega
10 Mega支援續傳(因為有連線時間限制 要完整下載完10MB的東西只能用續傳軟體)
目前兩個網站都提供檔案的直接連接... 不過因為是在開發階段...
如果網站有人使用 還是會再改為需要連回網站內來下載
製作這種暫存檔案的網站 最大的收穫就是瞭解不同瀏覽器對於檔案下載編碼的處理
為了讓多國語言檔名的檔案在各種不同瀏覽器上正確執行 還做了蠻多測試
會在下一篇來作說明...
另外之前寫得LinkOne.. SourceCode忘了備份 硬碟直接被我Format掉了@@
哪天有空 再來改寫一次吧 ... 之前想了一堆Todo都沒有作
本來有想過要開發的社群網站 也都一直沒空 所以也就一直拖著...
不過目前有幾個是想先來寫的.. 第一個是投票網站 也可以作為揪團用
第二是輕量級留言板 主要是用來作其他網站整合用 並且要可以支援自訂CSS
SFileC, 10Mega TodoList:
加入Cron, 自動檢查是否有過期檔案, 自動整理連線Log
修改外連機制
影像連結格式說明文件
降低List的CPU使用量
SFileC TodoList:
續傳支援
10Mega TodoList:
降低大量下載時的CPU使用量
改用transactions對資料庫的寫入
後台管理
2009/02/18
[+/-] : [Note] 用手機寫Blog...
方法二 用第三方軟體或是blog提供軟體傳送
方法三 用內建瀏覽器或是opera上網寫...= =
方法一 目前多數blog提供商都有提供使用email來post文章 如 blogger 等等
如果圖檔要另外放, flickr 也有提供 使用email來發送
只要先到flickr 上設定 blog及email選項後 就可以使用
目前 CHT一封 MMS要4$(30-300K) (發送到電子郵件算網內)(不能折抵月租費)
如果沒包月上網吃到飽算是不錯得選擇 只要控制在300K以內
MMS以Base64來編碼 所以原始圖檔應該要小於225K 加上其他資訊及header
保守一點 圖檔在200K左右 大約可以放200萬像素的圖檔
目前國內各大服務商基本上都有提供這樣的服務
方法二 使用第三方軟體 如 CellSpin 或是 Nokia Photos 等等
使用的是 3G/3.5G/GPRS/Wifi 網路 完全依照使用量收錢
如果有吃到飽的費率就 盡量用吧
或是一些電信業者都有推出行動部落格的功能...
當然是 額外收錢... 不過...
我查了一下費率使用emome的行動部落格 一封只要1.5 好像更便宜
不過容量限制在1封100K以下(全部100M)
也只能用在他自己的部落格系統上
如果圖量小或是新的部落客應該是不錯得選擇
但是比較有彈性的作法 還是用299吃到飽(49元月租 最多收299)吧
方法三 ....算了吧 更麻煩...
上網研究一下 大概有這幾種吧...
日本很流行這樣的 用手機寫部落格 不知道他們大多是用何種方法?
2008/07/22
[+/-] : Domain, template 修改
今天終於想到要把blog也轉換過去...因此人氣跟排名都要重新累計了
正式網域為 blog.jostudio.net
目前還有兩年到期 希望到時候會記得去續約...XD
除了改網域名稱外 template有稍作修改...
另外把原本右邊的badge從Jaiku的版本換成Twitter的版本 (參考)
然後把原本的自我介紹拿掉了... 因為沒人想看吧XD
最後就增加了一個公益廣告上去... 是BloggerAds所提共的 因為

不過因為adblock的關係 自己是看不見的XD
2008/07/08
[+/-] : 找出所有連到你Gmail的連線
Gmail常有人抱怨安全性不佳 被盜帳號等問題
因此google推出 tracking open sessions的功能
來找出所有連到你gmail的所有連線
或許能提前找出一些安全漏洞...
所紀錄的資訊有 連線方式 IP 跟時間
像是無論使用pop3 網頁 還是手機登入 都會被記錄下來
如果有遠端連線忘記登出 還可以遠端進行登出的動作
來避免一些安全上的顧慮
參考資料 Find Who Has Access to Your Gmail Account
--
常見連線方式:
Browser
Google Desktop
Google Toolbar
POP3
IMAP
Mobile
2008/06/20
[+/-] : Flash 9.0.124 解決crossdomain問題
終於解決 crossdomain.xml 的問題
同時 就算資料來原在GAE上 一樣可以運作範例如下
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
其中 新增了allow-http-request-headers-from的欄位
其中 headers依照服務的需求 可以給定不同的header 都可以就設*吧
不過目前twitter, jaiku等服務還是沒有新增此欄位
因此要自製 badge的話 還是需要經過其他方式來解決
參考資料:Understanding Flash Player 9 April 2008 Security Update compatibility
External data not accessible outside a Flash movie's domain
2008/06/19
[+/-] : Twitter Badge 復活 + Jaiku badge 中文支援
但是遇到crossdomain的問題
要避開這一個問題 就是資料來源跟flash檔放在同一個網域下
因此只要將原本寫好的badge修改一下路徑 傳送到appengine上就可以運作
另外有玩 Jaiku 的人都很困擾的... 就是他們的新版Flash badge不支援中文
因此對我們使用中文語系的人來說 只能使用舊版的javascript版本
很醜又缺乏彈性...
所以就拿上面的twitter badge改成jaiku版本... 讓他勉強可以使用
因為小弟沒美術天份 所以有興趣可以下載原始碼回去研究 作一個漂亮一點得版本
如果有不錯的成品 歡迎留個連結給我
範例頁面 (因為blogger本文中不能內嵌embed的tag)
因為服務放置在appengine的關係 是暫時借用流量來處理
有需要的請自行去申請一個AppEngine的網站來玩 請不要從我這偷挖連結去用
Flash 原始檔下載(update 20080620)
AppEngine Source(update 20080620)
AppEngine的使用方式請參考官方說明
--
不過這麼作不知道有沒有違反他們的服務條款
--
update 20080620
更新crossdomain.xml
更新jaiku支援icon
--
更換下載地點 SkyDrive太難用了
--
20080722
經過幾個星期測試...
發現jaiki的feed輸出很不穩定 等待時間也很久...
因為GAE有執行時間限制 所以常常失敗...反而不適用
而twitter除了他們server有時後會自己爛掉外 其他時間都很穩定
因此目前將badge又改為使用twitter的版本
--
20081214
目前盜連者ID : 9676262 (RDENit)
2008/06/18
[+/-] : 新版Flash(9.0.124)對安全性的設定
對於網路連線的部份是全部封鎖 (至少我裝了兩台都是這樣)
所以一部分的網路應用的Apps 或是badges都失效
需要手動在設定中開啟 並且設定為記憶 才會每次都可以連線
不過對於跨網域的連線卻一直都失效狀態...
連crossdomain.xml都沒有去連線.... 很奇怪的狀況...
不會解決...
本來是在測試twitter badge 想說利用GAE轉送json的結果...
結果死在GAE的crossdomain.xml不能正常運作...
後在直接使用yourminis的服務 本來可以正常運作
不過更新完Flash Player之後 就死翹翹了 = =a
--
更新20080620 解決方式
2008/06/16
[+/-] : GAE: Link One
不過對GAE的環境完全不熟 也不會用Python 所以我就先設計了兩個簡單的服務作練習
第一個是短網址服務 因為隨便註冊到的GAE名稱叫l1 所以命名叫Link One
雖然是練習,不過還是盡量做的完整 功能盡量齊全 也提共API的服務
因為沒有短的Domain 因此申請l1在appspot上是我能找到最短的網址了XD
如果有人覺得站寫的不錯,想要借我domain用的話也可以聯絡我(*^^*)
服務設計原理很簡單,對URL做Hash取其中幾碼再加上隨機排序的1到兩的字碼
組成的一組Key作為短網址 不過此設計有可能造成資料重複
因此同一個hash值的網址 在出現3萬多次之後會被蓋掉舊的資料
不過一照此網站的使用情況應該是很難發生吧 而且GAE僅提供500MB的儲存大小
以一組資料約1K來算,僅能儲存50萬筆資料,希望他的Quota會越來越大XD
此網站也登錄到App Gallery上 不過此類型應用應該沒啥人有興趣吧
此服務還在持續改版中 不過功能大致完成 僅剩下後端管理的部份
以後有時間再慢慢來寫 現在很忙沒空XD
-
新想法...把短網址服務拿來作網摘 bookmark 也不錯用
把API拖進工具列 看到喜歡的網站就按一下...也蠻方便的
不過此功能來需要幾個子功能
feed輸出 選擇是否公開個人頁面 使用API新增時 可輸入描述等
以及新增tag來作分類
一樣 有空再寫吧
-
目前實際上線後 有一些問題要解決....
當進行資料庫的存取時 如果太久沒有回應 會有Exception產生(僅GetbyName 不是query)
通常會發生在深夜時段 也就是國外的網路尖峰時期 其他時間倒是沒發生過
而我程式收到Exception時 就會出現錯誤畫面
所以會造成服務不是很穩定的現象 需要重新整理來重送資料
目前不知道如何解決 這似乎和GAE本身 跟BigTable的機制有關 或是我程式寫的爛
再說吧....
update 原來這是那一天GAE故障 全世界都一樣不能存取
-
以下為Change logs
V1.1 20080601
對每一個Hash值所對應的Index隨機排序,使用SLink為服務名稱
隨機挑選不同hash func方式來hash,每日寄送統計資料到管理者帳號
利用資料庫記錄總新增次數 每日新增次數 查詢次數等資訊
記錄每一個鏈結的點及次數 在使用者管理介面顯示
V1.2 20080601
修正index.yaml
V1.3 20080602
將Description欄位型態修改為Text 提升長度, 改進安全字元處理
Type無法使用 移除它, 修改日期問題 修正範圍限制 預設值等
開放所有功能給未登入使用者
Memcache for static, 管理者 Init Static
V1.4 20080602
移除'|'
V1.5 20080602
修改PrintableStringIndexLen位置
V1.6 20080602
再次修改IndexList 加入<[\]`{}| 修改長度計算方式
新㽪允許子網域,預覽子網域,修改允許URL為CJK字元
V1.7 20080603
新增Templates,css,js等,加入Google Analytics,修改URL
V1.8 20080603
CJKV字元短連結
V1.9-11 20080605
修改程式架構, 修正bugs
V2.1 20080606
修改程式架構以降低CPU使用率, 修正Bugs
V2.2-2.18 20080606
fix Bugs for GAE Errors
V3.1 20080616
管理介面 檢視各類型連結,提共API 並輸出為HTML,修改名稱為LinkOne
被動建立使用者資訊 儲存預設選項 Desc 過期日 KeySize 每頁幾筆資料
提供Full CJKV API版本能使用使用者預設值,修改過期日期資料型態
修改URL的資料型態為Text來允許不同的協定,新增Logo圖檔
3.2 20080616
移除debug時的設定 修改網址
Todo:
Art Design,
使用者條款 English Version 補齊
管理者介面,加入除密碼外需要登入才能檢視及連結選項
新增網摘模式 可輸出個人feed 是否公開個人頁面 tag功能
使用API新增時 選擇是否輸入描述(需登入)
--
update 20090506
清除了一些廣告用的連結
原始source code找不到了 沒法繼續更新@@
Via This Links
2008/05/30
[+/-] : 開始計畫寫一個 Google App Engine的程式
剛好很適合做在 Google App Engine (GAE)上面 也可以作為一個社群化的服務
(idea暫時先保密啦 等真的做不出來再公開... 也誠徵好友一起來寫)
目前GAE也已經正式對公眾開放 不需要再等待 可以直接開通(需要手機認證)
有興趣的人也可以去申請一個來玩玩.... (其他介紹請看另一篇介紹)
在正式公開之後 有新增了兩個API 分別是Image的處理及MemCache
因此發環境也升級到1.1.0 之前有下載的記得要去升級一下
目前開發環境就是 Google App Engine SDK
加上 Google Map API 及 Google Visualization API 的使用
其他部分可能會再加上 jQuery 來處理 AJAX 或是使用 YUI來處理介面及AJAX
目前最大的問題是 什麼都不會 而且也沒啥時間
Python不會 所以從頭學起
網頁已經超過8年沒寫 也大概是從頭學起 再加上現在流行AJAX
雖然知道原理 不過完全不會用 還是從頭學起...XD
而且現在沒啥時間搞著個 所以大概要兩個月的時間來學習跟架構
目前已經把資料表的設計跟程式流程大致規劃好了...
不過要正式開始寫 還真的不知道該如何下手
所以目前先從簡單的開始學習 把Demo中的Guestbook修改一下
加入完整的帳號管理功能 可以有個人頭像跟簽名檔
學習使用Templates跟CSS來編排版面 以及上面提到的API跟libs等
然後希望可以每個人申請自己的留言版 跟提供多種UI及feeds來輸出
(不知道有沒有辦法支援 domain/username 然後在同一支程式中知道是哪一個user)
之後就可以作一個像twitter一樣的東西在GAE上面 看來這又要花我很多時間了
2008/05/12
[+/-] : 利用 網路 分享 Mercurial
接下來就是要建立Server來讓專案可以多人協同作業
Mercurial(HG)提供了多種不同方式例如藉由SSH, HTTP server或是他本身內建的Server來運作
最簡單快速的方式就是使用HG內建的Server
只要在工作路徑所在的命令列輸入
hg serve或是使用 TortoiseHg 在工作目錄上按右鍵選擇Web Server再按下Start
就可以開始使用http的分享服務
如果要修改port或是listen address可以使用-p或-a參數修改
如果有不只一個工作目錄 可以使用參數--webdir-conf加上設定檔案來控制路徑
設定檔有兩種方式 如果工作目錄都在同一個目錄下 使用
[collections]
/prefix/to/strip/off = /root/of/tree/full/of/repos
如果都不在同一個目錄下 分在在各處的話使用
[paths]
virtual/path = /real/path
virtual/path = /real/path
其他參數可以參考這裡 或是下指令
hg -v help serve使用內建Server的最大問題是還不提供使用者管理的機制
只能選擇開放或關閉push指令 (設定在hgrc中 在最後介紹)
然後也不提供SSL的通道 雖然參數已經有了 不過目前還沒實做完成 等下一改版吧
接下來是使用SSH來分享 這部份比較簡單 直接使用系統中的SSH Server如OpenSSH等
只要登入的使用者對工作目錄有存取權限即可 其設定方式就請參考網路上的SSH設定方式
在Client端連接的路徑就是
ssh://user@host:port/path要注意路徑中的path如果要使用絕對路徑 必須為兩個//
例如工作路徑在/var/hgroot/proj1 而登入代碼則為
ssh://josh@host:port//var/hgroot/proj1/而使用相對路徑的話則是會跟使用者的家目錄相關
例如使用josh登入 home路徑在 /home/josh 而工作路徑 /home/hg 連結路徑就要打
ssh://josh@host:port/../hg如果要使用非對稱金鑰認證來取代密碼 可以使用putty ageant之類的代理
或是修改Mercurial.ini設定檔中的ssh項目加入-i參數 如
ssh = "C:\path\TortoisePlink.exe" -ssh -2 -i "D:\path\key"最後一種是使用現有的http server來實做 以下我會針對使用apache跟lighttpd來介紹
會分成兩種是因為實驗室的Server有兩種平台 不過設定起來都很簡單
首先要確定已經安裝好Server 以及 都可以執行cgi及python的script
接下來只要利用hg所提共的hgwebdir.cgi依照以下步驟即可
在Apache的設定檔中加入以下設定 (我是放在<VirtualHost *:443>之中 只允許安全通道)
ScriptAliasMatch ^/mercurial(.*) /path/to/web/hgwebdir.cgi$1
<Location /mercurial>
Allow from all
Options ExecCGI
AuthType Digest
AuthName "Mercurial Repository"
AuthUserFile /path/to/web/passwd
Require valid-user
</Location>
在lighttpd的設定檔中加入以下設定
(一樣只允許SSL 所以我放在$SERVER["socket"] == "0.0.0.0:443"之中)
alias.url += ( "/mercurial" => "/path/to/web/hgwebdir.cgi" )
$HTTP["url"] =~ "/mercurial" {
cgi.assign = ( ".cgi" => "/usr/bin/python" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/path/to/web/passwd"
auth.require = ("/mercurial" => (
"method" => "digest",
"realm" => "Mercurial Repository",
"require" => "valid-user"
))
}
然後利用htdigest建立帳號密碼放到/path/to/web/passwd
最後在hgwebdir.cgi的目錄下建立檔案hgweb.config
設定工作目錄的所在(跟最上方使用內建server一樣的設定檔)
以上是不允許匿名pull 僅允許登入使用者pull
如果要開放匿名pull 可以將 Require valid-user用 <Limit GET POST PUT>包住
現在基本上完成了 接下來是針對每一個檔案庫做設定
設定檔通常為 .hg/hgrc 或是Mercurial.ini等
跟分享服務有關的欄位為 [web] 一般會放置以下內容
style = gitweb //更改顯示的style
allow_archive = bz2 gz zip //提共下載的格式
contact = Josh //聯絡人資訊
push_ssl = true //是否使用SSL
description = Josh's Shadow Research Project
allow_push = josh //允許push的使用者 (如要開放所有人請使用 *)
hidden = false 是否在網頁中列表中隱形
設定完到這裡就大功告成啦
最後在Client端執行
hg clone path或是在瀏覽器中輸入 https://host/mercurial
來測試結果啦
目前使用Mercurial上最大的問題 還是在TortoiseHg上
對中文環境的支援度很差 如果新增檔案的檔名有非英文字母
需要先Add再Commit,不能像只有英文字母的檔案只要Commit自動幫你Add
在Commit視窗中 所有中文檔案一律變成亂碼(這也是不能自動新增的原因吧)
另外註解不能打中文 否則只能在本機端上看到 在網頁上就都會變成"?"
還有Mercurial不支援目錄的版本控制 因此不能新增一個空目錄上去
這點相當不好用
再來就是使用上的習慣問題 修改檔案前都要先執行Sync中的Pull檢查是否有新版
在寫程式當中 記得到一段段落就要Commit一次
在程式寫完一個部份之後 還要執行Sync中的Push到Server上
不像TortoiseSVN一樣 只要Update然後Commit就做完所有事項
多了很多步驟 用起來麻煩很多很多....
不過使用Mercurial有我上一篇提到的一個不錯的優點 他完全支援P2P的運作
只要每一個Client都有分享目錄出去 不需要有真正的中央Server來控管
可以完全在自己的Client端中來運作
參考資料
Collaborating with other people
Publishing Repositories with hgwebdir.cgi
PublishingRepositories
Setting up the Hg http interface
hg(1) hgrc(5)
Apache Docs
Lighttpd Docs Alias
2008/05/11
[+/-] : 分散式版本控制系統 DVCS
最近使用Subversion(SVN)的專案越來越多,我實驗室的專案也全面使用,不過,這種Client-Server式的架構有一個嚴重的問題,就是在網路斷掉時,就沒有版本控制的能力了,也因此有另一種形式的版本控制系統的出現。
Distributed Version Control System (DVCS),分散式版本控制系統是現在越來越紅的一種版本控制系統的方式,有別於一般Client-Server的架構,分散式其實就是在每一個Client端都有自己的檔案庫存在,自己開發的文件檔案就直接Commit到Local端的檔案庫中,而檔案庫再跟主要的檔案庫Server或是其他Client端的檔案庫做同步化的動作,稱作 Pull 跟 Push ,因此在網路不通時,可以完全的獨立作業,又同時享有版本控制的好處,而網路連線時再跟其他檔案庫來交換內容,甚至可以打破傳統階層式的架構,採用Peer-to-peer(P2P)的方式來運作,每一個Client同時也是Server(依據不同的版本控制統而定),這裡有一些DVCS的運作圖可以連上去看一下(BitKeeper的產品介紹)
看了一下Wiki上的比較跟列表,比較紅或是比較成熟的大概是Git, Mercurial, Bazaar 以及SVK吧,在Choosing a Distributed Version Control System這一篇文章中有列出一些選擇的項目及他們的優缺點可以作為參考,如果是原Subversion的使用者,或許可以考慮使用SVK,因為SVK原本就是建立再SVN的環境上在做擴充,可以參考架構圖,不過在多方比較後,Mercurial(水銀的 所以又叫做Hg XD)看起來還是比較好的選擇,尤其是使用介面上有TortoiseHg可以使用(Git有git-cheetah Bazaar有TortoiseBzr 不過看起來都還在早期開發階段),作為初學者,入門的難度比較低,而其功能性及擴充性並不會因此而打折扣,依然是相當強悍的軟體,在加上最近終於進入的1.0的階段,其成熟度應該是可以受到肯定,目前簡單的試用,除了介面還是很醜(這大概要怪GTK+),其他用起來並沒有太多的障礙,目前把我的研究開發目錄從SVNf遷移到Hg上試試看。
補充資料
Distributed Version Control Systems - Why and How(PDF)
Git - User's Manual - GitWiki - Wikipedia
Mercurial - Distributed revision control with Mercurial (PDF) - WikiPedia
Bazaar - Workflows - User Reference - Wikipedia
Free Host - Git - Mercurial
The Risks of Distributed Version Control
Chris' DVCS wishlist
最後要介紹一下assembla這一個網站,他是一個專案管理的整合型線上環境,除了提共Wiki, Chat, Blog, Milestones, Scrum, Tickets等線上專案管理常見的功能外,在這裡介紹他最大的原因就是,他還提供了SVN, Mercurial, Git等檔案庫的支援以及Trac的線上環境供使用及HTTPS的加密通道,免費的有500MB的空間(沒有說明流量限制),並且可以付費升級,跟其他的FreeHost不太一樣的是他就算免費一樣可以選擇完全的Private,對於一般的專案管理應該是非常夠用了,而且他有商業模式在,應該比較不容易倒吧XD
2008/04/06
[+/-] : 在QNAP TS-209上安裝 lighttpd, fastcgi, perl ...
首先是官網終於將2.0版的Firmware釋出 目前是版本是2.0.1
就先將機器更新到最新版的Firmware 吧...
要安裝lighttpd前 首先要確定有安裝ipkg套件在 請參考上一篇或是官網的討論
接下來將套件列表更新後 就可以開始安裝了
ipkg update
ipkg install lighttpd
// 如果要支援php
ipkg install php-fcgi
// 如果要支援cgi
ipkg install perl
//如果要支援 sqlite
ipkg install sqlite2
ipkg install sqlite
接下來開始伺服器的設定 首先是lighttpd.conf
會放在 /opt/etc/lighttpd/lighttpd.conf 或是
/share/MD0_DATA/optware/opt/etc/lighttpd/lighttpd.conf (同一份檔案)
視需求將所需要的模組反註解 例如
"mod_alias","mod_rewrite","mod_simple_vhost","mod_cgi","mod_compress",
將下方server.document-root的部份指到網頁的跟目錄 設定好log的位址
以及修改port位址 如
server.port = 80
如果要支援cgi 加入
$HTTP["url"] =~ "/cgi-bin/" {
cgi.assign = ( ".pl" => "/opt/bin/perl" ,
".cgi" => "/opt/bin/perl" )
}
只要將cgi,pl檔案放在cgi-bin目錄中就可以執行了
其他模組的設定就請參考官方文件囉
接下來設定 fastcgi的模組 會放在/opt/etc/lighttpd/conf.d/10-php-fcgi.conf
基本上只要確定路徑正確就好 其他設定一樣參考官方文件 不改也可以
因為系統的效能很差 所以不建議把max-procs及PHP_FCGI_CHILDREN參數設太高 2到4就好
再來是php.ini文件 會在/opt/etc/php.ini
如果要支援sqlite請加入
extension=sqlite.so
extension=pdo_sqlite.so
extension=pdo.so
其他部份就依據需求設定
最後就啟動看看 看是否能運作
chroot /share/MD0_DATA/optware /opt/sbin/lighttpd -f /opt/etc/lighttpd/lighttpd.conf
如果剛剛port設為80 通常是不能運作的
要事先去把原始的Apache伺服器關閉
不過系統還會自動執行Qthttpd把port80給站住 所以還要在關掉Qthttpd
/etc/init.d/Qthttpd.sh stop
測試ok 網頁正常運作之後 就是要設定自動啟動啦
修改autorun.sh
mount /dev/mtdblock5 -t ext2 /tmp/config
cd /tmp/config
vim autorun.sh
在檔案最後加上
/etc/init.d/Qthttpd.sh stop
chroot /share/MD0_DATA/optware /opt/sbin/lighttpd -f /opt/etc/lighttpd/lighttpd.conf
最後離開
cd /
umount /tmp/config
還沒完 系統還定期去執行Qthttpd 所以要修改crontab
我的是放在/mnt/HDA_ROOT/.config/crontab
將第五行註解掉 如
#30 4 * * * /etc/init.d/Qthttpd.sh restart
來避免他自動執行 最後重開機 就大功告成
附註
如果要支援SSL通道 要先產生一把金鑰 如
// 自己signed自己的方式
openssl req -new -x509 -keyout xxx.pem -out xxx.pem -days 3650 -nodes
也可以參考其他網入上產生金鑰的方式
並在lighttpd設定中加入
$SERVER["socket"] == "0.0.0.0:443" {
ssl.engine = "enable"
ssl.pemfile = "/path/xxx.pem"
}
不過443這一個port會被stunnel給站住 還要在修改stunnel.conf
通常會放在/mnt/HDA_ROOT/.config
將最下面的[https]中的accept更換port
這是給網頁設定用的SSL通道 (thttpd server)
如果不想用lighttpd的SSL也可以直接修改stunnel的設定
加一個[https2]的區塊編輯即可
最後
還要研究一下將系統原本的mysql加入php的支援當中
應該是要修改extension的位置就好
不過Lighttpd對於WebDav的支援似乎不太好 要加入SVN的支援還要在研究
結論
lighttpd真的是比apache快太多了 用的cpu跟記憶體也少 (跟LiteSpeed的比較)
雖然功能沒有apache那麼強 不過在這種小型NAS上也很夠用了
最後在裡面裝了一套使用SQLite作為資料庫的論壇PunBB 順利運作中^^
下次有空來試試Nginx 更高效率的httpd軟體
2008/03/13
[+/-] : 在Linux上裝SVN + Backup Script
不過就在搬家前 發生了一些小插曲 相當不幸的小插曲
舊的Server上所有硬碟一次壞光 大概是Power壞了還是主機晶片啥壞了的 anyway
雖然在NAS上有備份 不過不是同步(同步的備份跟著一起壞了) 跟最新版有著一天的差距
還是要想辦法把壞的的資料弄出來 因此花了幾天的時間來掃描磁碟 救資料等...很累
另外 還有一台QNAP的 TS-209 雖然速度不快 不過空間倒是很大 拿來放著還蠻可惜
所以就當作主Server 的同步備份Server 才不會發生一次硬碟全壞光就資料統統消失了= =
因此有兩台主機(一台Ubuntu 另一台NAS也是Linux)做SVN Service
那還要一台電腦做非同步的資料備份 定期壓縮傳上去
首先 在Ubuntu上安裝很簡單 在Package Manager上找到SVN 等他裝完就OK
接下來測試一下有沒有裝好 隨便建立一個新的檔案庫
svnadmin create /SVNRoot
svnserve -d --listen-host=0.0.0.0 --listen-port=<請輸入> -r /SVNRoot
這裡 /SVNRoot是新檔案庫的位置 請依照需求建立
像我已經有舊的檔案庫 所以只要把舊的檔案庫cp過去就好
然後就在Client端測試一下連線是不是OK 方法就請參考這一篇
最後就是要設定開機自動啟動 Ubuntu可以在 /etc/init.d/下 建立shell script如下
vim /etc/init.d/svn
//進入編輯畫面之後按i再輸入下方script (此Script感謝龍頭大大教導)
#!/bin/sh
# description: Svnserve auto start-stop script. by bignose
# chkconfig: - 20 80
#
SVN_HOME=/usr/bin
SVN_OWNER=root
if [ ! -f "$SVN_HOME/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
'start')
su - $SVN_OWNER -c "$SVN_HOME/svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /SVNRoot -T"
;;
'stop')
su - $SVN_OWNER -c "$SVN_HOME/killall svnserve"
;;
'restart')
su - $SVN_OWNER -c "$SVN_HOME/killall svnserve"
su - $SVN_OWNER -c "$SVN_HOME/svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /SVNRoot -T"
;;
esac
//記得輸入想要的port之後 按ESC跟:wq存檔離開
//最後給他執行權限
chmod 755 /etc/init.d/svn
最後重開機看看是不是還能連線囉...
接下來設定另一台電腦 QNAP的 TS-209 由於是ARM的CPU
本身也沒有提供套件安裝的功能 稍微麻煩一點 不過要達成也很簡單
官網的討論群當中已經有很詳細的介紹
首先 要安裝ipkg來方便我們安裝各種軟體 詳細設定請參考此討論串
cd /share/Public
wget ftp://csdread:[email protected]/NAS/Optware-Ipkg/optware-tsx09.tar.gz
tar zxvf optware-tsx09.tar.gz
//安裝
./optware-bootstrap-qnap-tsx09.sh optware_chroot.tar.gz
//反安裝
./optware-bootstrap-qnap-tsx09.sh uninstall
//如果有遇到某西軟體不能跑 需要再加上
chroot /share/HDA_DATA/optware /bin/bash
等他下載完所有套件 安裝完之後 以後要在這台機器上安裝軟體就方便啦
要知道所有ipkg的套件有哪些可以 可以輸入
ipkg list | more
接下來要安裝 SVN 只需要輸入
ipkg install svn
接下來跟上面一下 建立一個檔案庫 並且設定自動啟動
不過TS-209有一些保護的功能 東西不能隨便放 這裡選擇在/share/Public下
想知道更詳細去爬爬討論區的文吧
svnadmin create /share/Public/Repository/
svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /share/Public/Repository/
最後 就是加到自動啟動的shell script中
mount /dev/mtdblock5 -t ext2 /tmp/config
cd /tmp/config
cat "svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /share/Public/Repository/" >> autorun.sh
cd /
umount /tmp/config
重開機測試看看吧
安裝完SVN 加下來就是設定同步備份的部份 這已經介紹過了
所有詳細的步驟 可以參考 "SVN檔案庫備份與同步"來進行設定
基本上大同小異 頂多是從Windows的batch語法 換成Linux的shell
另外要記得 要給shell script的檔案加上 執行的權限
最後是非同步備份的部份 我寫了一個shell script來實做
最後把他加到crontab裡面讓他自動執行...
那原理跟之前提到的備份SVN的文章一樣
先把需要的部份hotcopy出來 使用hotcopy來取代dump的原因是
hotcopy才能保留一些檔案庫的設定檔 比dump的資訊更完整
接下來把所有東西壓縮起來 我使用的是7z 如果不想用他可以用基本的tar跟gz,biz2等等
最後用lftp把他傳到另一台電腦上保存
完整的 script file可以在這裡下載
解開後修改上方一些基本的參數之後就可以執行
除非你想更換7z到tar,gz... 更換lftp到ncftp等
那要傳進去的參數 目前就是到底要備份哪些東西
如果傳進一個目錄 會去遞迴搜尋哪些是檔案庫
如果傳進一個檔案 就會依照檔案每一行所指定的檔案庫來做
所以我在crontab內的作法 就會依照檔案庫的更新頻率的不同 來指定備份頻率 例如
00 06 1,7,13,19,25 * * root /root/Backup.sh /root/freqlist
00 05 4,16,28 * * root /root/Backup.sh /root/list
00 04 10,22 * * root /root/Backup.sh /SVNRoot
最後重新啟動cron或是重開機就ok啦
Script的部份 有空會在改改 把所有要設定的東西都寫成參數傳進去
就不用在修改Script本身 讓他更有彈性 不過目前可以用就好
希望這次設定可以稱久一點 讓我畢業之後還可以繼續用下去XD
這是我第一次在Linux的系統上架Server 也是第一次寫Shell Script
如果有任何錯誤或是不妥的 歡迎馬上告知
2008/02/28
[+/-] : Google Site
在前年Google收購了JotSpot之後 就開始期待著Google的Wiki服務何時會上線
一直到去年底 終於放話會在今年第一季推出 所謂的Google Sites
終於 在昨天終於正式推出此服務 並提供所有Google Apps的使用者來申請
首先登入Google Apps進入到Dashboard版面中 有個 Add more services
選進去就可以看到新的Google Sites在那裡等著被啟用了...
啟用後一樣可以設定Domain跟分享權限
接下來進入你所設定的網域中 按下Create new Site 開始建立新的Site
一開始會先要設定新的站點名稱 也會是url跟在Domain後的網址
接下來就是分類與描述 最後就是此站點的長相 有提供一些範本可以選擇
另外是一些權限設定 有多少人可以編輯 及有多少人可以觀看
開啟網站成功後 進入選項還有更進一步的視覺會設計可以修改
例如每一種樣式的顏色及背景字型等,以及要出現在最左上方的Logo圖樣
至於頁面的編輯方式幾乎跟Google Page一樣
是一種所見即所得的編輯環境
另外也可以切換為HTML編輯模式 來輸入一些Script
另外有一個特性就是可以附加檔案到每一個頁面去
根據說明顯示 每一個Domain有10GB空間 for Premier and Education Edition
但是沒說一般版本是多少@@
另外是每一個使用者可以有500mb的空間 比起google page來的好
對於每一個頁面 還可以新增 Comments上去 就可以直接跟頁面內容以及其他使用者互動
另外也可以整合其他Google的資源到頁面當中 例如Picasa Albums, Google Docs or Calendars等
不過還是有一些缺點 對於每一個頁面 可以控制是否要顯示sidebar 是否要顯示標題
是否要允許附件及評論 就是沒有是否允許被看見或是被編輯
對於存取權限是針對整個網站 而不能針對某一個頁面
因此如果有一些私人文件不想被看見 就只能用老方法
建立兩個站點 一個開放一個隱藏...= =
這裡是我的測試站點 開放測試 帳密請往前找介紹Apps的文章

