~尋找生活新鮮事~

  • Sync Files and Folders Outside Dropbox Folder

    我是最近才開始用 Dropbox,雖然早就聽聞 Dropbox 的大名,但以前沒需求。實際有了需求才申請了 Dropbox,確實地感受到它強大的同步處理機制,如同它所宣稱的 Simplify your life,解決了我在三台 Windows,一台 MacOS 和一支 Android 手機間同步檔案的問題。 不過 Dropbox 的同步似乎限於它的資料夾,不能隨便選一個資料夾就設定同步。但是有一些檔案我並不想塞在 Dropbox 資料夾也希望能同步。這時候作業系統提供的檔案連結功能就派上用場了。微軟在 Windows Vista/7 的 NTFS 中提供了 Junction, Symbolic Link,作用等同於 Linux / Mac 下的 Symbolic Link,讓系統模擬出一組指向實際檔案位置的連結,藉此騙過應用程式。這個概念和 WinXP 時代以來就常用的捷徑 (shortcut) 不同,捷徑是無法騙過應用程式的,因為它實際上只是一個 .lnk 檔案。 使用 Symbolic Link 這種連結必須以指令的方式達成。以 Windows 7 為例,在命令提示列下輸入 mklink /D “C:\Users\Steve\Documents\Dropbox\DesiredFolder” “C:\Path\To\DesiredFolder” 在 MacOS 或 Linux 下使用 ln…

    繼續閱讀全文…

  • MySQL: Import large file using SOURCE command

    在 MySQL 匯入 sql 資料大都時候都是用 phpMyAdmin 這個軟體來代勞,不過有時候碰到非常巨大的 sql 檔案,動輒數百 MB,甚至更大時就超過了 phpMyAdmin 處理能力。 這時候比較方便的做法是用命令列來匯入,指令是 SOURCE。 mysql> use exampledb; Database changed mysql> source C:\data.sql; 等待 MySQL 執行完畢就完工了,無痛匯入巨量的 sql 資料。

    繼續閱讀全文…

  • Disable Mac OS X mouse acceleration via the command line

    2011 年夏購入了一台 Apple Macbook Pro,從此踏入 MacOS X 的世界,當初購入的目的是想學 Ruby, RoR 和 Object-C,不過工作上幾乎還是用 Windows 7。我覺得我跟 Mac 一直沒有很熟。換了工作後發現新同事們使用 Mac 做網站開發的比例非常高,老闆也不介意我帶自己的 Mac 上班,所以就開始逼著自己長時間用 Mac 來熟悉它。 MacOS X 預設是有滑鼠加速的,這點我很不習慣,滑鼠加速會讓滑鼠在長距離移動時,游標移動的速度以等比的方式增加。個人覺得這是一種介面上的不一致,總讓我摸不透滑鼠要移多快才能到預期的點。下圖左是關閉滑鼠加速度,不管使用者的手移動多快,滑鼠游標的加速度都不會改變,所以游標的速度跟手移動的速度一致。下圖右是開啟滑鼠加速 3.6 倍,使用者的手移動越快,游標會有額外的加速度,這種不一致的速度讓我老是找不到飛到螢幕外的游標。               經過一番 Google 後發現可以用指令的方式關閉滑鼠加速。加 terminal 輸入以下指令: defaults write .GlobalPreferences com.apple.mouse.scaling -1 修改完畢後重新開機,滑鼠游標就不會再輕功似亂飄了。

    繼續閱讀全文…

  • PHP: Constrains a value to not exceed a maximum and minimum value

    幾年前在寫 Processing (P55) 的時候,有個方便的 function 叫 constrain。用法是 constrain(value, min, max) 例如 float mx = constrain(mouseX, 30, 70); 當 mouseX 大於 70 時就回傳 70,小於 30 時就回傳 30,將值限制在 30 ~ 70 這個區間。因為 Processing 大都是拿來寫互動、視覺方面的程式,所以用到此功能的頻率頗高。後來轉換跑道寫其他語言時,發現好像都沒有這個方便的函式。 最近又有 constrain 的需求,想起幾年前見過有人用 min, max 來代替,寫法如下。 <?php function constrain($value, $min, $max){ return max( min( $value, $max), $min); } echo constrain(29.3, 30, 60); ?>

    繼續閱讀全文…

  • Windows7 開機自動 PPPoE 撥接連線

    從 Windows XP 到 Windows 7,中間隔了這麼多年,Win7 反而少了方便設定 PPPoE 自動連線的設定,微軟的開發理念有時候真的蠻難理解的。這幾天因為重灌家裡的電腦,所以又遇到這個問題。這次 Google 搜到一篇舊文,發現這個設定方便蠻好用的,而且一試就成功,所以做個筆記先。 首先建立好 ADSL 或光世代的 PPPoE 連線後,在設定裡關掉提示畫面,讓撥接的動作在背景完成就好。 請記得剛剛設定的連線名稱。接著進入 RegEdit …. 如果您不曉得什麼是 RegEdit,那請找別的方法吧,您可能不適合這種修改方式。 在 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] 新增字串,名稱自取,內容輸入 C:\Windows\System32\rasphone.exe -d "你的連線名稱(不是撥接帳號)",像我的網路連線是叫 Seednet 12M VDSL,就是輸入 C:\Windows\System32\rasphone.exe -d "Seednet 50M VDSL" 以後開機就會自動撥接囉!

    繼續閱讀全文…

  • Bookmark: PHP Markdown

    Bookmark: PHP Markdown

    PHP Markdown 是一款以 PHP 為基礎的 Markdown 語言轉換器。Markdown 是一種輕量級的標記語言,透過簡單易懂的語法來編寫文件,主要用於技術性文件,Markdown 轉換有多種語言的實作,這款便是以 PHP 來做轉換。 http://michelf.com/projects/php-markdown/ 這個套件分為標準和 Extra 版,後者多了更多功能。不過就實務上來說,筆者還在尋找 JavaScript 版本的 Markdown Engine,這樣才能做到所見所得的即時轉換。

    繼續閱讀全文…

  • Bookmark: Pixastic, a JavaScript Image Processing Library

    Pixastic 是一款 JavaScript 影像處理函式庫,藉由 HTML5 對 Canvas 的像素操作能力來達到影像處理的機制。相當適合拿來做轉場特效,例如這個 HTML5 Canvas Slideshow 範例。 http://www.pixastic.com/lib/

    繼續閱讀全文…

  • Bookmark: MathJax

    MathJax 是 OPEN SOURCE 的 JavaScript 顯示引擎,可以將 LaTeX 與 MathML 語法轉換成數學公式。 http://www.mathjax.org/

    繼續閱讀全文…

  • MySQL: Add time value to a date value

    在改 MySQL 查詢時碰到需要設定未來時間的情況,翻了一下 MySQL 的文件找到指定的方法。 用 ADDDATE() 或 DATE_ADD() 來增加時間,像這樣… SELECT ADDDATE( NOW(), INTERVAL 15 HOUR); 就可以得到距離現在 15 個小時之後的時間。HOUR 可以替換成 YEAR、MONTH、DAY 等等,完整的單位列表可參考這裡。ADDDATE() 與 DATE_ADD() 的差別只有名稱不同,用法與效果相同。 如果是要減去時間,就用 SUBDATE() 或 DATE_SUB() 。

    繼續閱讀全文…

  • Bookmark: PHP QR Code

    用 PHP GD2 產生 QR Code 的 Library,簡單易用,有多種參數可以設置。採用 LGPL 授權,使用上也比較有彈性。 http://phpqrcode.sourceforge.net/

    繼續閱讀全文…

  • Bookmark: Google QR Code Tool

    在搜尋 QR Code 資料時看到的,簡單易用的 QR Code 產生工具。 http://code.google.com/apis/chart/infographics/docs/qr_codes.html

    繼續閱讀全文…

  • 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…

    繼續閱讀全文…