顯示具有 開發 標籤的文章。 顯示所有文章
顯示具有 開發 標籤的文章。 顯示所有文章
2017/11/03

[+/-] : Backblaze restore refund

comments
從小就玩電腦到大 累計了很多資料 最怕的就是硬碟壞掉 資料救不回來
每次硬碟一壞 就痛很久 搞資料救援 掃描什麼的實在是很煩
從四五年前開始 就買了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末

comments
很久沒有來關心這裡以及之前開發的小東西
之前寫的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是用來隱藏內容的 變成永遠開不了啦
總之能多簡單就多簡單吧


2017/08/11

[+/-] : [note]Mi6 GPS issue

comments
好多年前買過小米2s 當初剛拿到手時 就有GPS很難定位問題
要root後手動修改參數才正常 幸好是後續版本更新 馬上修正了這個問題

沒想到新的小米6 又是遇到GPS很難定位
應該說是完全無法定位
使用GPS test/ GPS status等APP 測試
等再久都是看到一顆兩顆衛星
總之狀況很詭異
而且兩個禮拜了 竟然還沒有更新 真是...

因為小米系統有一些比較控管嚴格的設定
所以第一時間就猜可能是這些造成的
首先進 "安全中心"
"電量" -> "應用智慧省電" 將會全時用到GPS的APP 改為 "無限制"
例如 Google Map, GPS Status, GPS test, Fit, Runkeeper, Runtastic, 導航等等
重點是 要將msa, msb兩隻輔助定位的也要 設定為無限制
一個會在 "已安裝應用" 內 一個會在 "系統應用" 內

然後 離開電量 到 "授權管理"
將 msa, msb 的權限全開 包含 "自啟動項目"
其他會用到GPS的 App就是 GPS等權限要開

然後離開 "安全中心"
在 "設定" -> "更多設定" -> "系統安全" -> "定位"
設定為 "高精確度"

"設定" -> "Wi-Fi" -> "進階設定"
將 "隨時開啟掃描" 也打開

不確定是以上動作那一個最有相關 或是全部都需要
總之目前在沒有root的狀況下  已經可以很正常的定位
使用導航 運動軟體 或是行程追蹤  等都可以正常使用 GPS也不會跳位置

但時還會有偶爾突然斷訊 再也無法定位
需要直接關閉GPS (點通知欄裡的GPS按鈕就可)等個幾秒再重開 又會恢復正常

有使用小米運動 或 Runkeeper 運動多次
目前就遇到過一次斷訊需要重開外 還算正常使用
有測試過 在社子島公園 白天萬里無雲情況下 原本是完全無法定位
修改後可以在1分鐘內冷定位完成 雖然比其他手機慢 但至少能用啦

目前看到論壇有蠻多人在哀號無法定位的
紀錄一下 或許其他人可以測試看看
真不行就等更新或是手動刷MIUI9

2014/10/10

[+/-] : [Note]Auto Change Logon Background on Win7

comments
這是個無聊的script
用於每次登入 或是每次電腦鎖定解鎖時 能夠更換登入頁面的背景

沒有包裝成 exe 或是 安裝檔 所以一切手動
需要工具但是可以不用安裝

首先 要先能夠更換背景
2013/08/22

[+/-] : [Note] 小米2S 降級

comments
前幾天 小米手機 升級 JLB 21 後 相當不穩定
一是軟體開啟後常常卡住畫面無法更新
二是點通知訊息常會開不了軟體
很衝動的下載 JLB 20 卡刷 直接更新後

悲劇就發生了... 所有軟體都開不起來 sim卡也無法啟動
查了資料才知道降級需要3清 ....

只好改用線刷 (會自己3清)全部重來啦

下載 ROM 工具
1. 解壓縮ROM到純英文路徑中
2. 安裝工具 / 開啟工具
3. 手機進入 fastboot (關機後 按著音量下加電源開機)
4. 工具選路徑, 按refresh後 Flash
5. 等他跑完 (應不超過 300sec)

第一次進去傻傻的先執行手機的設定後(就是登入小米帳號 跑同步等等)
再用PC的小米手機助手執行復原
結果不斷重開機 復原失敗

第二次在線刷後 開機不設定狀態下
直接執行復原...
目前手機正常運作中... 也不卡機了

2013/08/16

[+/-] : [Note] Free VPN / SSH Tunnel

comments
由於某些因素 會需要Security 的 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
推薦 SecurityKiss, 流量滿了改開Softether, Hotspot, OkayFreedom或是CyberGhost

另外還有很多免費試用Pro帳號的可以無限流量 也可以多去申請看看


2013/07/06

[+/-] : 小軟體 dos下時間顯示

comments
小小工具 在DOS指令下 顯示時間
主要是我在寫Batch檔時方便處理時間的
比處理 %DATE% 或是 %TIME%好用
也可以在Batch下 計算運行時間
或是自定義格式 (內部使用strftime)

使用 -? 顯示說明

vc2008編譯 (/MT)
MinGW (GCC 4.5.2 -O3 -static)


ChangeLog:
20121005 v1.3 加入s,e功能
20121108 v1.4 改用 -作為選擇前綴字 避免argv0不為檔名問題

2010/08/05

[+/-] : 小軟體 關閉螢幕訊號

comments
因為在公司用的螢幕沒有快速鍵可以切換DVI/VGA訊號來源
都要進去選單裡面慢慢按 很麻煩...

所以寫了一支小小的程式 可以暫時關閉螢幕訊號
螢幕就會切換到另一個訊號源去了 還蠻方便的

下載 (21K)

預設是關閉15秒自動回復
可以接參數 能設0到300秒, 0是不自動回復,
亂打參數沒保護, 會被atoi當作0輸出
螢幕關閉後 動動滑鼠或鍵盤也會回復

程式用VC2008編的 不過用靜態鏈結 應該是不用額外的 dll
在XP跟Win7上測試ok

程式碼很短 就一行廣播message通知關閉螢幕
時間到在廣播回復
ref
2009/04/03

[+/-] : GAE : Small File Cache

comments
Small File Cache 一樣是練習Python的在GAE上的成品
提共放置檔案暫存在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對資料庫的寫入
後台管理
2008/06/20

[+/-] : Flash 9.0.124 解決crossdomain問題

comments
經過搜尋及實驗測試...在新版的Flash 9.0.124中要跨Domain讀取資料
終於解決 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 中文支援

comments
前幾天有提到 要利用appengine來轉送twitter的json資訊
但是遇到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/16

[+/-] : GAE: Link One

2 comments
上一篇文章有提到要開始寫一個GAE(Google App Engine)的服務
不過對GAE的環境完全不熟 也不會用Python 所以我就先設計了兩個簡單的服務作練習

第一個是短網址服務 因為隨便註冊到的GAE名稱叫l1 所以命名叫Link One
雖然是練習,不過還是盡量做的完整 功能盡量齊全 也提共API的服務
因為沒有短的Domain 因此申請l1appspot上是我能找到最短的網址了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的程式

comments
最近有一個生活上的需要 希望有一個應用程式來達成目的
剛好很適合做在 Google App Engine (GAE)上面 也可以作為一個社群化的服務
(idea暫時先保密啦 等真的做不出來再公開... 也誠徵好友一起來寫)

目前GAE也已經正式對公眾開放 不需要再等待 可以直接開通(需要手機認證)
有興趣的人也可以去申請一個來玩玩.... (其他介紹請看另一篇介紹)
在正式公開之後 有新增了兩個API 分別是Image的處理MemCache
因此發環境也升級到1.1.0 之前有下載的記得要去升級一下

目前開發環境就是 Google App Engine SDK
加上 Google Map APIGoogle 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

2 comments
上一篇文章介紹了分散式的版本控制系統 我選擇了 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來實做 以下我會針對使用apachelighttpd來介紹
會分成兩種是因為實驗室的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

comments

最近使用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 ...

4 comments
上一篇裝完SVN之後 又想把原來的apache換掉 換一個比較省資源的lighttpd
首先是官網終於將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/14

[+/-] : Twitter Badge失效

comments
之前做的Twitter Badge失效了
不知道是不是 twitterAPI改掉了...
不過我看他所提供的Flash範例並沒有更動 日期還是舊的
奇怪了....= =
有空需要來好好研究一下

---
update
原來是Flash的crossdomain.xml搞得鬼
詳情請看官網開發blog
2008/03/13

[+/-] : 在Linux上裝SVN + Backup Script

comments
因為Lab的Server搬新家 加上網管使用Ubuntu來做OS 所以SVN也跟著要搬到新的機器上
不過就在搬家前 發生了一些小插曲 相當不幸的小插曲
舊的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
如果有任何錯誤或是不妥的 歡迎馬上告知
2007/12/15

[+/-] : Templates for IE6

comments
之前在修改這一個Templates的時候 發現在IE6上有許多問題
所以基本上還是已Firefox跟IE7能運作為主...
不過今天在Update Google Analytics的Script時 順便看了統計資料
發現連上網頁的 還是以IE6為主 大約佔了60%多
IE7不到20% Firefox也是不到20% 剩下約2%是Opera跟其他
所有有空還是修一修Templates吧....

不過還是要呼籲 趕快換掉IE6這一個爛東西吧...
2007/12/12

[+/-] : 自製 Twitter Badge

4 comments
因為Twitter官方的Badge一直都不是很好用
Flash精簡版的能控制的太少 字型會太小 中文會爛掉
複雜版的又會包含所有其他Follow的人
JavaScript版的又很難設計CSS讓他好看
所有就上網搜尋了一下有沒有比較好的解法
Maso的Blog發現有他精簡Flash版的原始碼 以及Maso的修改版
就抓下來研究研究 新增一點點功能之後
可以在右邊 我的SideBar上看到成果
將原本的Title Bar拿掉了 取而代之的是個人圖片
另外新增了Follow 的連結 就不用在Flash下方再加入一小行文字
不過比較實用的是 可以用參數控制文字大小跟顏色等參數 以下為範例
flashvars="bgcolor=0&type=user&id=1&timecolor=222&msgsize=12px&msgcolor=#150040&OpenWindow=_blank"
增加了程式使用上得彈性 目前先改到這樣
之後可能會在增加要不要放圖片 以及圖片尺寸的參數
雖然這很好寫 不過還是要有空才行 XD

有興趣的可以下載原始檔去研究

另外沒有裝Flash的 要直接編譯好的請從我的網頁原始碼自己挖Flash檔的路徑
但是請不要直接使用 GooglePage的流量會暴掉 (我沒有Google Code的空間@@)
就請麻煩下載後自己找地方放吧...XD


--
update
不確定twitter的API是否有更動 突然會抓不到訊息
不過官網的範例並沒有更新 很奇怪耶
暫時先不用 有空再來檢查看看@@

update
原來是Flash的crossdomain.xml搞得鬼
詳情請看官網開發blog

update
twitter badge用GAE復活
 
Back to Top
This Site Power by JoStudio. Some Rights Reserved.