~尋找生活新鮮事~
-
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 = ‘…’) { // 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…
-
CodeIgniter: Display ActiveRecord Generated SQL
感覺在台灣用 CodeIgniter 開發的公司還不少,CodeIgniter (簡稱 CI) 是以 MVC 為基礎的 PHP framework,輕量以及容易上手是相當吸引人的特色。 CI 的 Database Library 中實作了 ActiveRecord 的功能,雖然它實際上是個 query builder,而不是真正的 ActiveRecord pattern,不過對於開發人員來說還是能有效地完成資料庫的存取動作,並減少自己組合 SQL 的麻煩。 在撰寫存取資料的 Model 時,經常需要查看 query string 來 debug,CI 提供了兩個方法來取得 query builder 產生出來的 query string。 一個是在 query 執行前用 $this->db->_compile_select(); 另一個是在 query 執行後用 $this->db->last_query(); 雖然不太清楚為什麼要分成執行前執行後,不過至少提供了 debug 的工具。 另外在成功 insert 資料後,也可以用下列方法取回自動增加 (auto increment) 的 id 值。…
-
jQuery Validation plugin: How to Use Regex as Rule?
在網頁程式中,表單的處理一直是很繁瑣的一環,client 端要用 Javascript 先對使用者的輸入進行初步過濾,資料送到了 server 端還是要再過濾一次。「永遠不要信任使用者輸入的資料」是表單程式的準則。 為了網站的安全不可少的 SOP,結果便是程式設計師要為此付出許多時間撰寫過濾程式。為了減緩程式設計師的腦細胞死亡速度,借助第三方程式的功能也是很重要的課題。在網頁前端常會用 jQuery Validation plugin 來對使用者輸入的資料進行前處理,這個套件內建一些基本規則,像是必填 (required)、電子郵件 (email)、網址 (url)、數字 (digits) 等等,但偶爾還是需要自訂特殊規則。 還好 jQuery 這個套件提供開放的接口可以自訂功能,透過簡單的幾行程式就能用正規表達式 (regular expression, regex) 來指定規則。 // 建立名為 ‘regex’ 的自訂規則 $.validator.addMethod(“regex”, function(value, element, param) { // 強制加上 ^ 與 $ 符號限制整串文字都要符合 return value.match(new RegExp(“^” + param + “$”)); }); $(“#myForm”).validate({ rules: {// 定義規則 …
-
CSS 變更選取文字的背景色
在 CSS3 的規範中,多了一些選擇器 ( selector ) 的定義,提供設計師更多元的元素操作方法。其中一項新增的選擇器是 ::selection,表示被選取的文字。 透過這項選擇器便能做出不同的選取區背景色。簡單的範例如下 <style> p.yellow::selection { background: #fff2a8; } p.yellow::-moz-selection { background: #fff2a8; } </style> 選取以下的文字試試 If you want a reason as to why this decision has been made, Blizzard is happy to provide you with two. The first is of course piracy, which they believe an always-connected game…
-
MySQL Reset Auto Increment Number
Database 裡在開新 table 時,常會使用俱有自動增值屬性 (auto increment) 的欄位來當 primary key,而常見的命名也不外乎是 ID 或是 post_id 之類的。每當插入一筆新資料,ID 就會自動加一,是很方便的功能。不過在刪除資料時,ID 值並不會重設,留下很多空的序列,像是 1, 2, 4, 7, 12 這樣,尤其是系統開發階段更是如此。 除了將 table 刪除,重匯資料以外,MySQL 官網上也有提到如何重設 auto-increment 的指標值。只要輸入下列 query 就能指定指標值: ALTER TABLE tbl AUTO_INCREMENT = 1; 當然數字可以依需求更改。 若是要在插入資料時就指定數值,要輸入下列 query: SET insert_id = 40; INSERT INTO tbl VALUES (‘blah’, ‘…’); 馬上接著的 insert into 就會是指定的 ID 值了,這個語法是一次性的,並不會影響其他插入的資料。 或是先入插入資料,再用…
-
MySQL 字串連接 concat
在 MySQL 資料庫中想產生一組獨一無二的 key,這樣可以做為比對的依據。打算直接在資料庫上操作新增欄位,至於 key 的產生是很直覺地想用 md5() 這個 function 來處理。但是因為要拿什麼資料來雜湊呢? 想說就用其他欄位加一加,再加上時間來湊。很直覺地寫下這樣的 query SELECT md5( id + name + now() ) 可惜這樣的結果會因為 id 是 int,而且 name 是 string 而產生非預期的結果。解決方法是把所有的欄位轉成 string 來處理,這時候需要 concat() 來組合字串。 SELECT md5( concat( id, name, now() ) ) 這樣就可以得到正確的 md5 值了。 deaf03c84d18a56b70e0b7d6438ada3e
-
PHP mail function 如何避免亂碼?
又是一個工作上碰到的問題,需要寫一個簡單的 email 發送功能。雖然是基本功能,不過常見的作法還是藉由 PHPMailer Library 來達成。不過這個案子因為寄信頻率很低,想說用 PHP 內建的 mail() 就可以處理了。但是人算不如天算,怎知 mail() 成功了,但是卻是一堆亂碼,標題、寄件人欄位都是亂碼….. 囧 經過一番 Google Search 的奮戰,找到一個很 tricky 的解決方法。將會出現亂碼的文字用以下方式處理…. “=?UTF-8?B?”.base64_encode(” 會出現亂碼的文字 “).”?=” 這樣用 GMAIL 收到信的時候就可以看到正常的文字了。 mail function 範例如下… function sendMail($recipient){ $subject = “=?UTF-8?B?”.base64_encode(“信件標題”).”?=”; $headers = “MIME-Version: 1.0\r\n”; $headers .= “Content-type: text/html; charset=UTF-8\r\n”; $headers .= “From: “.”=?UTF-8?B?”.base64_encode(“寄件人 “).”?=”; $headers .= “<sender@email.com>”; $message = ‘<p><font size=”3″ face=”新細明體”>信件內文</font></p>…
-
[Excel] Convert Date and UNIX time
這個問題是最近工作上碰到的,把 SQL 裡的 time 欄位輸出,整理成 Excel 給 PM,不過報表裡的時間都是 UNIX time 格式,除非有超強的心算,不然一般人是沒辦法直接看著 UNIX time 換成算時間日期的。 UNIX time 是以 1970 年 1 月 1 日零點 (UTC) 為起點,每過一秒加 1 的時間計算方式,更詳細的介紹請參考維基百科。根據這個公式,本文撰文時刻是 1306971424。 Excel 內部的時間計算方式和 UNIX time 有異曲同工之妙,不過起點是 1900 年 1 月 1 日,日期是整數,時間是小數,詳情請參考這篇如何在 Excel 中使用日期與時間。翻遍 Excel 2010 的 Help 也找不到和 UNIX 或 POSIX 相關的 function,看來只能土法轉換了。 轉換公式 =Unixtime / 86400…
-
[Guide] XName.org DNS settings
很久以前寫過一篇[Guide] Google App 服務設定教學,沒有想到這篇教學後來的詢問度超級高,到現在還常有人留言詢問相關的問題。 文中是用 EveryDNS.net 完成 DNS 設定的,因為 xname.org 一直沒弄成功,不過隨著 EveryDNS 被收購了,還是趕緊研究 xname 如何設定。其實仔細看完說明後,發現設定跟 EveryDNS 其實沒兩樣,唯一的差別是這句話…. You have to use the full qualified name of the computer, with the trailing dot at the end. ex: mail.500cc.tw 之前一直沒設成功居然是因為沒注意到這行而自爆。最後在網址結尾多打一個點就收工結束了,就醬。下面是範例圖,請參考,我沒有設定 MX record。
-
MSI R6850 Cyclone 1GD5 POWER EDITION
原文發表於 https://what30.wordpress.com/2011/04/04/hardware-msi-r6850-cyclone-1gd5-power-edition/ 從去年開始就覺得打電動有點無力,2008 年入手的 HD4850 也漸漸無法應付 2010 年的遊戲了,不過去年沒有很吸引人的顯卡,就這麼拖著,最近看著顯卡價格開始跳水而心動… 上上週去了趟光華,本來想說帶張 6950 或 560 回家,最後卻是在 PCHome 分期付款買了一張便宜很多的 6850,PCHome 跟光華的價差不大,又送貨到府,還送一台網樂通 XD
-
Ducky DK1008-D 黑青軸機械鍵盤
原文發表於 https://what30.wordpress.com/2011/02/28/ducky-dk1008d-cherry-mx-keyboard 上個月底看到特價的 Ducky 機械鍵盤,雖然手上沒缺鍵盤,但還是衝著價錢不貴的份上刷卡了,入手價 NT$1,999
-
Linux 如何修改大量檔案名稱?
客戶反應放在 Linux server 上的 flash 互動教材無法播放,FTP 登入後發現檔案都在,目錄及檔案權限也正常,但就是無法播放。還好 Google Chrome 瀏覽器 提供了非常完善的 debug 功能才讓我注意到那一長串檔名裡,有一個字母大小寫不一樣… Orz Linux 是大小寫不同 (case-sensitive) 的系統,所以大小寫不同視為不同的檔案,難怪會 404… 只要改檔名就解決問題了,但是客戶的檔案有好幾百個,一個一個改真是浪費人生啊 (茶)。還好 Linux 提供了可以批次改大量檔名的指令 rename。 rename 指令是這麼用的: $ rename oldname newname files 第一個參數是 “要被替換的字” 第二個參數是 “替換的字” 第三個參數是 “要被替換的檔案” 要改副檔名的話,可以下這樣的指令: $ rename .txt .html *.txt 如此一來,所有的 .txt 文字檔都會改成 .html。以此類推,也可以下 $ rename IMG img *.jpg 把照片的檔名改成小寫。這個指令也可以修改資料夾的名字,端看第三個指令怎麼篩選。 一個步驟就把客戶的檔案名字都改好了,收工。
-
printf(“Hello world!”);
開了新的部落格…. Qoding Style。 思考了許久才決定再開一個新的部落格。這裡打算記錄關於 IT、RD、MIS 方面的心得和筆記,也是個人擔任 攻城 工程師的一些點滴。也許還會亂入一些開箱文。 算起來脫離學生身份後已經換了三份工作了,從一個小小的翻譯編輯跨到 MIS,再換到 programmer,每次換跑道都是從頭學起。過去嘗試過興趣與工作結合,但興趣變成壓力後感覺就完全不一樣了,踏上 programmer 這條路是再一次挑戰興趣與職業的交融,冠上了「攻城師」的稱號。 我的另一個部落格 What 3.0 已經經營長達六年之久,雖然無法否認多少因為懶墮和噗浪的關係而讓發文頻率降低不少,但不論如何都不想讓它倒站,這種永續經營的念頭讓我對於「再開一個新部落格」有點反感,深怕達不到自己的期望與要求。思考了很多天後才拿出信用卡買下這個網域和空間,花錢給自己挖了個坑,還自願跳下去。 算算一年的網址和空間費用也要台票兩千多,本來想在 Google Blogger 無料開個新站就好了,也比較熟悉 Blogger 平台,不過對於 Google 一直擺爛 Blogger 感到無奈,尤其是不能自訂 Post URL 這點真的很囧,我想要兼顧中文標題和 SEO 啊! What 3.0 在 wordpress.com 本來就有個分站,但只有當作備份,這次決定換到 WordPress 平台裝認真。Bluehost 的後台真的蠻容易上手的,只花了幾分鐘就搞定 WP,相當無痛。Bluehost 也有支援 Ruby on Rails,有機會想學學。 昨天老爸才開玩笑地說要送我一台 MacBook Air 讓我開發 iPhone / iPad 程式,然後賺得錢他抽 50% 這樣,當然先說好啊…
-
再見了,老迅 - 回顧山葉老迅光 (1993-2009?)
隨著換機車的日子將近,默默服役多年的老迅光將退居備用車的職位。一向很重感情的我照慣例都要幫車車寫篇回憶的,之前已經寫過一系列再見了,高爾夫、小美、小黑,該是寫「再見了,老迅」的時候了 (?)
-
米干基本教義派 !
原文發表於 https://what30.wordpress.com/2005/01/14/%e7%b1%b3%e5%b9%b2%e5%9f%ba%e6%9c%ac%e6%95%99%e7%be%a9%e6%b4%be/ 這是一篇值得紀念的文章。這是我第一次去吃米干,從此之後我就上癮了。到現在已經吃了兩年了,看到這張照片,還是止不住口水。 今天早上起了個大早,五點半起床,六點跟朋友集合,冒著刺骨寒風與迷濛雨霧驅車前進… 車開了一陣子才到目的地,夜色仍然昏暗,空氣仍然冰冷,呼氣隨即變霧氣。 今天的目標是」米干「。就是為了它,為了它離開溫暖的被窩,走在黑暗冰冷的街道。停好車,步行一小段路,在黑暗的街道上有一家燈火通明的小店。心中驚呼」就是它了」! 時間清晨六點二十。 店裡人不多,跟老闆點了五碗米干,看著親切老闆娘的熟練動作,沒一會兒,五碗熱騰騰的米干就搬上桌了。據同行的朋友說,米干是雲南料理,一碗米干也沒有幾樣東西,溫熱的白色寬麵條、一些炒蛋及一顆半熟蛋,最後淋上滿滿的湯汁與辣渣,再隨個人喜好加點酸醋。(行文至此,我又餓了.. ><) 就這樣簡單到不行的材料,混合起來的美味卻是貨真價實的。微酸微辣的湯汁,配上不怎麼光滑的寬麵條,粗俗的口感,卻又意外的順口。卻讓人欲罷不能,一口接一口,明明點的是大碗的米干,沒兩下就解決了,還忍不住再跟老闆娘多要點湯汁,多喝兩口也過癮! (口水流滿桌了啦) 同行的朋友中只有我是第一次嚐到,其他人都早已是米干信徒了,連續吃上一個禮拜都不會膩….. 是一天三餐都吃哦~ 也許你會納悶,幹嘛挑這一大早吃?? 沒辦法,這店只開這時間,晚了就沒了………. Orz ….. 朋友都是吃個早餐,順便連中、晚餐的份都買好…. 標準的米干信徒啊~~!! 附上照片讓大家流口水~~
- Announcements (2)
- Bookmarks (30)
- Database (17)
- Design (4)
- Fonts (1)
- User interface (1)
- Network (3)
- NodeJS (1)
- Office (1)
- Excel (1)
- Operating system (48)
- Programmers' Joke (1)
- Programming (90)
- CodeIgniter (9)
- HTML & CSS (12)
- Bootstrap (1)
- JavaScript (14)
- jQuery (6)
- Laravel (10)
- Object-C (9)
- PHP (30)
- Python (2)
- Regex (3)
- Software (11)
- Photoshop (1)
- Sublime Text 2 (4)
- Visual Studio Code (1)
- Tutorial (14)
- Uncategorized (2)
- Utility (10)
- Version Control (9)
- Git (7)
- Subversion (3)
- Wordpress (7)
- 勸敗株式會社 (28)
- 咬一口蘋果 (12)
- 文具控 (3)
- 旅行與出遊 (1)
- 日記 (18)
- 玩具與公仔 (11)
- 玩攝影 (10)
- 每日一照 (7)
- 生活品味 (5)
- 硬體玩物 (50)
- 美食 (2)
- 胡言亂語 (2)
- 軟體與 App (2)
- 這個 App 真有趣 (4)
- 開卷有益 (6)
- Kobo (1)
- Readmoo 讀墨 (2)
- 外文書籍 (1)
- 大眾科學 (1)
- 攝影繪畫 (1)
- 關於本格 (1)
- 電玩遊戲 (35)
- Android (6)
- iOS (6)
- Nintendo Switch (11)
- PC (10)
- PS4 (6)
- Xbox Series X|S (6)
- XboxOne (8)
- 電視電影音樂 (2)