~尋找生活新鮮事~

  • Bookmark: The Restart Page

    偶然在網路上逛到這個網頁,收錄了很多作業系統的關機與重開機畫面,不但按鈕真的可以按,連音效都完整重現,實在太有趣了。 http://www.therestartpage.com

    繼續閱讀全文…

  • PHP: Reading $_GET variable

    在 PHP 環境下要取得 GET 變數的內容只要用 $_GET 就可以取得,不過在 CodeIgniter Framework 或其他特殊環境下,$_GET 預設是被關掉的時候,想要正常使用 GET (如 AJAX) 時就得費一點點工夫了。 <?php $url_segs = parse_url($_SERVER[‘REQUEST_URI’]); parse_str($url_segs[‘query’], $_GET); // urldecode automatically print_r($_GET); // 印出 $_GET 內容 ?> 完工,就醬。  updated Feb 1, 2012 後來才注意到 CI 的 config.php 大約在 157 行的地方有一行設定 $config[‘allow_get_array’]        = TRUE; 預設打開了 $_GET,不需要用上述的方法,改用 $this->input->get() 即可取得 $_GET 內容。

    繼續閱讀全文…

  • Bookmark: BgPatterns.com

    在設計網站或是製圖時,常會需要用到背景圖,BgPatterns 是一個迷你的網路應用,能使用內建的圖案來產生具有重複性質的 pattern 圖案。 http://bgpatterns.com

    繼續閱讀全文…

  • PHP: Fibonacci Sequence

    Finbonacci Sequence (費氏數列、費伯納數列) 對於寫程式的人來說應該不陌生。數學上的費氏數列是以遞迴方式定義的,如下 F0 = 0, F1 = 1 時,Fn = Fn-1 + Fn-2 用文字來說,就是費氏數列由 0 和 1 開始,之後的費氏數列就由之前的兩數相加。前幾個數字是 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377….. 用遞迴方式的標準寫法是…

    繼續閱讀全文…

  • PHP: Using explode() with seperator "\n"

    有個以 PHP 開發的案子在測試階段回報有 bug,雖然兇手不是我,但還是去了解一下。原來的程式是讓使用者輸入多個 Youtube 影片網址,然後由程式取出每一支影片的 uid,封裝成陣列後回傳。之後的程式會取出 uid,然後在網站上 show 出 Youtube 影片。不過當使用者輸出多支影片的網址後,只有最後一支影片會出現,前面的都錯誤了。 原程式是這樣寫的… <?php //使用者輸入的影片網址. http://後面空一格是避免Wordpress把影片顯示出來 $youtube = <<<EOF http:// www.youtube.com/watch?v=SAIEamakLoY http:// www.youtube.com/watch?v=MhVp9gcxLJY http:// www.youtube.com/watch?v=OxzucwjFEEs EOF; function get_youtube_hash($youtube){ $hash = array(); $youtube = explode(“\n”, $youtube); foreach($youtube as $y){ $youtube_qs = parse_url($y, PHP_URL_QUERY); $youtube_qv = explode(‘&’, $youtube_qs); foreach($youtube_qv as $key => $value){ list($k, $v) = explode(‘=’,…

    繼續閱讀全文…

  • jQuery: Check if Element is Visible or Hidden

    用 jQuery 編寫網頁效果時經常需要檢查網頁元素 (element) 的狀態,像是可見 ( visible ) 或是隱藏 ( hidden )。 常見的寫法是 if( $(element).css(‘display’) == ‘block’ ) 或是  if( $(element).css(‘display’) == ‘hidden’ ) 不過我一直覺得這兩種寫法很累贅,又萬一元素的顯示狀態不是 block,而是 inline-block 或是別的呢?在翻閱 jQuery 文件時想到一個更便捷的用法,用 is 來檢查元素狀態即可。 $(element).is(“:visible”) 回傳值是 true or false,更方便。 if( $(‘#foo’).is(‘:visible’) ) { // it’s not hidden, do something } else { // it’s hidden so do…

    繼續閱讀全文…

  • How to Convert String to Slug

    在這個 SEO 當道的年代,簡單易懂的現代網址已經是基本常識了。根據 W3C 的網址規定,合法字元僅有 A – Z, a – z, 0 – 9, -, ., _, ~, :, /, ?, #, [, ], @, !, $, &, ‘, (, ), *, +, ,, ;  = ,而且橫線 ( – ) 之後都是有特別意義的保留字,所以過去常看到亂七八糟的亂碼網址,像是本文的標題不處理的話就變…. How%20to%40%20Convert%20String%20to%20Slug 雖然對電腦來說沒什麼差別,但是對人類來說卻是難以理解、難以記憶的無意義片段。

    繼續閱讀全文…

  • CSS: How To Use @font-face

    過去在開發網站時,字體的選擇一直都很保守,因為每個瀏覽器與作業系統對字型的支援很有限,幾乎就那幾種安全字型可以用。不過自從 CSS 多了 @font-face 這個指令後,事情開始有了些微的變化。@font-face 允許設計師在 CSS 指定特殊別的字型,瀏覽器會根據設定去下載這個字型來顯示,就像 background-image: url(‘link/to/image’); 一樣,瀏覽器會下載背景圖來顯示。

    繼續閱讀全文…

  • Email Address Validation Using Regular Expression

    寫驗證規則最常碰到的就是 email 檢查,每次寫 Regular Expression 都要重新思考一下規則,覺得這樣太浪費時間了,直接寫個筆記給未來的自己複製貼上。 <?php // 隨便寫幾個 email 來驗證規則 $mails = “someone@gmail.com, _apple@apple.com, ex@ex, some-body@gmail.com, NEXTstep@pchome.com.tw, test@nf.NL”; $mails = str_replace(‘ ‘, ”, strtolower($mails)); // 轉成小寫並去除空白字元 $mails = explode(“,”,$mails); // 依逗號切斷,並存入陣列 $valid_mails = array(); foreach($mails as $mail){ if(preg_match(“/^[a-z]+[\w\d\.\-_]*@[\w\d-]+\.[\w\.]+[a-z]$/”, $mail)){ array_push($valid_mails, $mail); // 可以直接塞進 PHPMailer,省去 $valid_mails 變數 $phpmailer->mail->AddBCC($mail, ”); } } print_r($valid_mails); ?> 輸出結果如下,不合法的 email…

    繼續閱讀全文…

  • Configuring the PHP Environment With php.ini in Bluehost

    Bluehost 允許網站管理者修改 php.ini,這是相當方便的功能。我開發了一個簡單的圖片空間網站 pic.qoding.us,在上傳檔案和處理縮圖上碰到了記憶體不足的問題,這時候就要靠修改 php.ini 來解決。

    繼續閱讀全文…

  • Image Problems in HTML Emails

    身為一個 PHP 工程師,寫過好幾支 Email 程式也是很正常的經歷,尤其是寄送廣告傳單 EDM 之類的功能。EDM 還是很多公司行號及機關愛用的行銷模式。美術人員製作 EDM 的時候通常會將廣告內容製成一張大圖,然後根據各個連結或功能來切割圖片,最後用表格 <table> 標籤來排版。雖然聽起來很古老,不過因為在 Email 裡能使用的 HTML、CSS 有限,所以老派的做法有其優點。

    繼續閱讀全文…

  • WordPress: Function add_user_to_blog() Can Not Specify Blog

    最近在開發 WordPress Network 的 plugin,其中有一功能是讓使用者取得特定部落格的特定身分。翻找了 WordPress CODEX,找到了 add_user_to_blog() 這個 function。

    繼續閱讀全文…

  • CodeIgniter: How To Set date.timezone

    最近寫了幾支程式,在檢查時間的時候發現都慢了八小時,才想到應該是沒設定時區,PHP 的預設時區是 GMT 或 UTC,而台灣是 GMT +8,所以系統慢了八小時。 在不改 php.ini 的前提下,可以將時區設定寫在 CodeIgniter 的 index.php 裡面。 // Insert code before this line, // require_once BASEPATH.’codeigniter/CodeIgniter’.EXT; if( ! ini_get(‘date.timezone’) ) { date_default_timezone_set(“Asia/Taipei”); } 這樣就完成 CI 的時區設定了。這段設定要放在 require_once BASEPATH.’codeigniter/CodeIgniter’.EXT; 之前。

    繼續閱讀全文…

  • MySQL: Displaying Rows With COUNT 0 With Group By

    MySQL 裡用 Count 和 Group By 來做統計是常用的寫法。舉例來說,以下兩個 table,一個紀錄公司行號的資料,一個紀錄員工資料。 Company id company 1 Google 2 Microsoft Employee id employee company 1 Jack Google 2 Eric Microsoft

    繼續閱讀全文…

  • Firefox: How To Remove Java Console From Add-ons

    我的電腦裡習慣會裝 Java 的相關套件,包括用來開發的 JDK 和用來執行的 JRE。這些套件會在 Firefox 裡出現一些不請自來的外掛。隨著 Java 更新,這些不請自來的外掛也隨之增加,想刪也刪不掉。

    繼續閱讀全文…

  • CodeIgniter: Build RSS Feed

    最近自己用 CodeIgniter 寫了個小網站,讓網友可以提供一些圖片素材。雖然後台有做了統計和紀錄功能,不過想再加一個訂閱 RSS 的功能,這樣我從 Google Reader 就能知道又有新素材出現。因為新網站是用 CI 寫的,想說就用 CI 寫一個 RSS feed。查了一資料,相關教學都有互抄的感覺,連 bug 都很一致是怎樣? 所以我又做了一些修改,確認每個瀏覽器打開都會認得它是一份 RSS 文件,Google Reader 也能正確讀取。

    繼續閱讀全文…

  • WordPress: Fix Syntax Highlighter MT Vertical Scrollbars in Chrome/Webkit/Opera

    本部落格有裝了一個 WordPress plugin: Syntax Highligter MT,用來顯示程式碼片段,效果很好。不過自從某次更新後,在 Chrome 和 Opera 瀏覽器裡卻會出現垂直的捲軸,這並不影響使用,但是明明沒有多餘的內容要顯示,卻硬生生多了 scrollbar,實在是有礙觀瞻。

    繼續閱讀全文…

  • CodeIgniter: Using PHPMailer to Send Email via GMAIL

    CodeIgniter 內建的 Email Class 對雙位元文字的處理實在很糟,設了 charset 也無法正確寄出 UTF-8 中文信件,從 1.7.1 到 2.0.3 都沒有解決這個問題。同事的處理手法有點囧,是用 iconv 把繁中轉成 GBK 再寄送,但這個方法也不完美,不是每個 Email Client 都能正確無誤地顯示,而且標題也有字數限制。 最近要處理一個電子報系統,再用 CI 那跛腳 Email Class 大概會被客訴到瘋掉。所以還是認命改用老牌的 PHPMailer Library。稍微試一下,發現在 CI 裡使用 PHPMailer 相當無痛,先到官網下載一份 PHPMailer (本文完成時的最新版本是 5.2.0),解壓縮後把整個資料夾丟到 CI\application\libraries\PHPMailer_5.2.0。接著在 libraries 下建立新檔案,就叫 mailer.php 好了。

    繼續閱讀全文…

  • JavaScript: Convert Size In Bytes To Human Readable Format

    在程式中處理檔案的時候,時常碰到的就是檔案大小的顯示。在資料庫裡通常是以 bytes 為單位做紀錄,但是顯示到畫面上,看到 479247294213 bytes 這種天文數字任誰都很難理解它到底有多大。 將天文數字轉換成普通人能夠輕易閱讀的型式很重要,所以 bytes 在畫面上要轉成 MB 或 GB 這類的型式。KB、MB、GB 之間都是 2^10 = 1024 為一個級數,所以轉換原理只要用遞迴一直除以 1024,直到小於 1024 就轉換完了。 以下這個寫法稍微特殊一點,不過原理並沒有差太多,是在找資料的時候看到的,在此留個筆記。 <script> $(function(){ $(‘span’).html(bytesToSize(479247294213)); }); function bytesToSize (bytes) { var sizes = [‘Bytes’, ‘KB’, ‘MB’, ‘GB’, ‘TB’, ‘PB’, ‘EB’, ‘ZB’, ‘YB’]; if (bytes == 0) return ‘n/a’; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return…

    繼續閱讀全文…

  • CodeIgniter: Use Ellipsize Helper For Custom Encoding

    CodeIgniter 的 Text Helper 裡有一個 function ellipsize(),用來截斷過長的文字,同時可以指定顯示長度、截斷位置,功能上相當不錯。 殘念的是這支 function 並不支援雙位元文字或其他特殊編碼的文字,拿中文字去切非常容易出現亂碼。所以決定幫這支程式做點小小的修改,讓它可以指定編碼,拿來截斷中文也沒問題。 function ellipsize($codepage = ‘UTF-8’, $str, $max_length, $position = 1, $ellipsis = ‘&hellip;’) { // Strip tags $str = trim(strip_tags($str)); // Is the string long enough to ellipsize? if (mb_strlen($str, $codepage) <= $max_length) { return $str; } $beg = mb_substr($str, 0, floor($max_length * $position), $codepage); $position…

    繼續閱讀全文…