Skip to main content

Posts

[探索 5 分鐘] i++ 與 ++i 的功能與性能是否相同 ? 用程式範例介紹 (c#)

值相同, 但我們知道這兩個 Foo 操作是不同的 Foo( x++ ); // post-increment Foo( ++x ); // pre-increment 大家比較常用的 i++, x++... 我們稱為 post-increment, 是在這一行程式完成之後, 再進行 +1 的動作, 反之稱之為 pre-increment。所以其實上面例子可以理解為如下 (功能上, 非編譯器行為), 更囉嗦的版本。 // Foo ( x++ ) Foo( x ); x = x + 1; // Foo ( ++x ) x = x + 1; Foo( x ); wiki  的例子更清楚, 請特別注意 y 的值。 int x, y; // Increment operators x = 1; y = ++x; // x is now 2, y is also 2 y = x++; // x is now 3, y is 2 這樣看完應該更無懸念了, post-increment 不是等號左邊跑完進行 ++, 也不是等號右邊跑完進行 ++, 就是這一行整個跑完才進行 ++。 // Copy one array to another void copy_array(float *src, float *dst, int n) { while (n-- > 0) // Loop that counts down from n to zero *dst++ = *src++; // Copies element *(src) to *(dst), // then increments both pointers } 以上是說明功能上的不同; 在場景上, 陣列或指標的操作很適合 post-increment, 有「同一行, 同時完成操作並與結束往下一個位置移動, 的簡潔代碼」設計 。性能呢 ? Foo( ++x ) 跟 Foo ( x++ ) 各跑 1 千萬次, 結果是 Foo( ++x ) 這個 pre-increment 呼叫版本性能穩定領先, 非常微小的領先。 附帶一提, 就單一行性能來比較...

[探索 3 分鐘] 用 JavaScript 與 css 客製化部落格 blogger

用 Google 的 blogger 撰寫技術日誌並夾帶程式碼, 需要動一些手腳, 這邊記錄我的設定: 程式碼的保留字顏色 css 設定 引用文字的 css 設定 基本上在 Blogger > Layout > Sidebar > + > HTML / JavaScript Gadget > 輸入自定義的 <style> 與<script> 即可。 客製化「程式碼」區塊樣式 接著會希望編輯文章時遇到特別要 Highlight 程式碼的地方, 把程式碼區段給夾起來, 做到簡單易用又便於閱讀、美觀。 run_prettify.js 版本 把程式夾在 <pre class="prettyprint">...</pre> 或 <code class="prettyprint">...</code> 就會自動被美化。 <pre><code class="prettyprint"> // Your Code </code></pre> 其他使用方法請參考  usage 。 highlight.js 版本 (推薦) <pre><code class="cs"> public ActionResult Index() { return View(); } </code></pre> 其他使用方法請參考 usage 。 客製化「引言」區塊樣式  預設的「引用」長相實在沒什麼特色, 所以也調整一下, 純粹個人偏好喜歡「框」起來的感覺。 程式筆記 只要在文頭所指示的位置, 放入以下的腳本內容, 儲存版型後重新檢視 post 文, 沒問題的話 style 就改為新版了。注意一下程式碼 style 須依賴.js 與 .css 檔案, 也請各自夾帶在 <script /> 與 <style /> 區塊中。 引言 style <style> blockquote { @import url(http://fo...

[探索 5 分鐘] Data Recovery Utility 工具 TestDisk 使用心得

今天遇到一個令人崩潰的問題, Cannon 相機中的相片不小心被砍了, 大約有 1,000 多張 !! 對於非常重視「回憶」的我來說是無法接受的, 雖然「人不該活在過去」... Anyway, 還好找到一個   TestDisk  軟體救回來了, 是免費開源的軟體, 因為這類工具通常都要付費, 遇到的機率不高, 但一遇到通常急到都會想花錢趕快救回來。所以趕快來分享這個拯救過程, 因為沒有 GUI, 會截命令列的圖給同學參考。 TestDisk 這個 Data Recovery Utility 名稱為 TestDisk, 我當初用的版本是 6.14 (目前最新是 7.1 )。 請直接下載最新版本  7.1 , unzip 後可得到 testdisk_win.exe 主程式。然後一路往下操作, 我選擇選了 SD 卡所在磁碟 G: G: > [Proceed]  Intel/PC Partition > [Proceed]  [Advanced | Filesystem Utils]  > [Proceed]  FAT 32 LBA -> [Undelete] Select a media 選擇磁碟機 Select the partition table type 選擇檔案格式 Advanced Filesystem Utils 選擇進階, 因為有指定的檔案來源與目標資料夾要輸入 Undelete 確定磁區 Choose source folder  確定被刪除的檔案來源, 通常 Cannon 相機照片會存在這目錄 ~/DCIM/100CANON Choose destination folder  把準備要救回來的相片存到指定的資料夾, 如 C:/backup, 確認後輸入大寫 C (小寫 c 無效哦 ) Recovering 拷貝中, 敬請期待 Magic !! 最後 1,000 多張照片就通通救回來, 已抱緊大哭了 (是因為感動)。希望可以幫助到需要的朋友。 參考資料 http://www.cgsecurity.org/wi...

[探索 5 分鐘] PayPal 的沙箱測試

在 CNIS (Canadian Network for International Surgery, 非營利組 織) 當志工時有的負責 SugarCRM 的同事需要跟 PayPal 介接支付, 問我要不要玩一下。稍微實驗一下發現可行, 主要是 PayPal 的沙箱做得不錯, 不會讓你不小心扣到錢 ...。 程式筆記 Email : invalid IPN detected 有時候, 就會發現收到這種通知, 感覺有測成功又覺得哪裡怪怪的 anonymous@ip-184-168-107-240.ip.secureserver.net ------------------------------------------------ ----------- [ 26/09/2012 14:34:42 ] ------------ ------------------------------------------------ WARNING: invalid IPN detected IPN Values received: item_name: Stuffed Bear item_price: $80 quantity: 8 total_amount: 40 ------------------------------------------------ ------------------------------------------------ Email: VALID IPN RECEIVED 在 PayPal Instant Payment Notification (IPN) 上有一點卡住, 後來找到一份代碼  Roberto Gomes 2008 , 就迎刃而解了, 後面會把原始碼整個提供出來。 from: anonymous@ip-184-168-107-240.ip.secureserver.net ------------------------------------------------ ----------- [ 26/09/2012 14:44:08 ] ------------ --------------...

[探索 10 分鐘] Extjs.ComboBox 用 ajax 方式讀取選項資料 (php + Yii + extjs + mysql)

在 CNIS (Canadian Network for International Surgery, 非營利組織) 當志工時推薦他們一個我比較熟悉的 Extjs framework, 但這個框架其實不好上手。同事問我怎麼從 db 撈一組國家列表, 前端用 Extjs 的 combobox 元件來互動 ? 於是我就動手了, 發現還真的挺複雜的, 所以趕快來記錄一下。 需求重點提示 這個下拉式選單 (combobox) 的內容是透過 ajax 初始化他的可用選項 獨立創建一個 controller.js 專門接收這個 request, 並與 MySQL 完成交互, 回傳 JSON 格式資料 需存取 stored-procedure combobox 需有一個 template 方便調整符合站台的樣式 (他們不要 Extjs 內建的樣式) 程式筆記 MySQL Store Procedure CREATE DEFINER=`my_db`@`%` PROCEDURE `my_sp`( ) BEGIN SELECT `country_code` AS `key`, `country_name` AS `name` FROM `myDB`.`myTable`; END$$ controller.php Yii framework 有個驗證機制, 需要 allow 給什麼 user 可存取什麼 controller, 要記得加上這一段代碼 (如下 accessRules 函式), 否則會得到 server side 的訊息:  failed to load resource the server responded with a status of 403 (access forbidden) controller // authorize the access permission public function accessRules() { return array( ..., array('allow', 'actions'=>array('create...

[探索 5 分鐘] 執行 MySQL command 出現 : cannot execute queries while other unbuffered queries are active (php + Yii + extjs + mysql)

  PHP 不算我非常熟的語言, 但今天在 CNIS (Canadian Network for International Surgery, 非營利組織) 當志工時幫忙解了一個 bug, 覺得可以記錄一下 程式筆記 Environment Front-end: Yii framework Back-end: PHP Database: MySQL SQL Tool: SQLYog OS: Linux PHP Exception 其實這是我自己種下的坑, 因為我建議使用 stored-procedure, 讓後端程式碼乾淨, 然後就出現這個 exception: CDbException CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.. The SQL statement executed was: select @output MySQL Stored-Procedure 一開始的方向是在看 store-procedure 以及後端給予的 @output 參數是否有問題, 結果徒勞無功, 同事也幫不上忙 CREATE DEFINER=`my_db`@`%` PROCEDURE `my_sp`( IN v_title TEXT, OUT output INT ) BEGIN ... SET output = LAST_INSERT_ID(); SELE...