Fold All / Expand All

2013年3月27日 星期三

Effective JavaScript


完全是要仿效 Effective C++ 系列,事實上出版社一樣(Pearson),也找了 Effective C++ 的作者 Scott Meyers 當 Consulting Editor。

68 Specific Ways to Harness the Power of JavaScript

所以看完 68 個項目後,就會功力大增!?









Item 1: Know Which JavaScript You Are Using
在講要確定你的程式會跑的地方,是否 JavaScript 會有同樣行為,一般來說就是寫的程式碼要在 target browser 上都可以正確執行;然後就提了 ES5 的 "use strict",比較有趣的是提到 code concatenation 時說,"use strict"必須是在一開始,如果類似以下寫法,是整個都不會有"use strict"
// file2.js
// no strict-mode directive
function g() {
    var arguments = [];
}
// ...
// file1.js
"use strict";
function f() { // no longer strict
    // ...
處理 code concatenation 的方法就是,要用 (functioni () {}) 把自己的 code 包起來。

Item 2: Understand JavaScript's Floating-Point Numbers
大多數的程式語言都有好幾種數字型別,但是 JavaScript 只有一種,用 typeof 看的話,會是 number,而這個 number 是 double-precision floating-point number,用 IEEE 754 標準的 64-bit encoding,也就是一般認知的 double 型別。

大部分的算術運算子都可以兩邊是整數或浮點數,而 bitwise operator 比較特別,會先轉換成 32-bit integer 再處理,詳細地說是 32-bit, bit-endian, two's complement integer。
例如:
8 | 1; //9
因為 JS 是用 double 來存數字,所以自以為聰明地用 bitwise 並不會比較快,反而需要多一些步驟,不過作者又提到說,某些 optimizing compiler 可能會偵測到並直接用 integer 來存,不過就是那句老話「premature optimization is the root of all evil」by 高德納

既然是 double ,就會有老問題,
0.1+0.2; // 0.30000000000000004
建議是盡量用 integer 處理,以避免 rounding 問題。

2013年3月24日 星期日

[烏克麗麗] 葛利格:皮爾金第一組曲【清晨】

翻譯有好多種啊…有「清晨」、「晨歌」、「晨曦」,標題就放Google搜尋建議的「清晨」

皮爾金組曲: http://zh.wikipedia.org/wiki/皮爾金組曲
Morning Mood (Morgenstemning): http://en.wikipedia.org/wiki/Morning_Mood

Ukulele Classic 這本有收錄
http://www.books.com.tw/exep/prod/magazine/magfile.php?item=M020023724



放個交響樂版本

2013年3月23日 星期六

海賊無雙2 攻略wiki

相關文章:
海賊無雙 攻略wiki

遊戲還沒買,先找攻略網站XD

ワンピース海賊無双2 攻略SP (1、2): http://gamesp.net/onepiece/
ワンピース海賊無双2攻略: http://gamers-high.com/op-musou2/
ワンピース海賊無双2 攻略Wiki: http://h1g.jp/opm2/
ワンピース 海賊無双2 攻略ランド: http://kaizoku2.gamelandos.com/
ワンピース海賊無双2 攻略: http://enjoigame.sakura.ne.jp/opm_2/

2013年3月10日 星期日

PHP CodeSniffer

PHP CodeSniffer
http://pear.php.net/package/PHP_CodeSniffer/redirected

用來檢查 PHP 是否符合 coding standards。

第一次跑的時候被擊沉XD,158行的php檔,總共有260個error...

原因是 PHP CodeSniffer 要求用 4 個 space 做 indent,而這個檔案是用 tab 做 indent,跑 phpcs 的時候可以加個參數「--tab-width=4」,讓 PHP CodeSniffer 先把 tab 都轉成 4個 space 再做檢查,不過這個缺點是反過來要抓 space 就抓不到。

PHP CodeSniffer 內建有數種 coding standards
The installed coding standards are Zend, PSR2, Squiz, PSR1, PHPCS, MySource and PEAR

也可以自己寫 standards ,參考 Coding Standard Tutorial 。

PHP Master: Chapter 8 Quality Assurance

一開始先介紹幾個 PHP Static Analysis Tools

phploc
https://github.com/sebastianbergmann/phploc
PHP Lines of Code

書中以 WordPress 為例子,跑出來的結果,作者說因為 WordPress 還需要相容 PHP 4,所以沒有用到 PHP 5 才有的功能,查了一下,WordPress 從 3.2 開始,把 PHP requirement version 拉到 5.2.4,WordPress 3.1 的時候是 PHP 4.3,而 WordPress 3.2 是 2011年7月4日 release,PHP Master 這本書則是2011年10月上市,所以寫書的時候,的確是還相容 PHP 4。

所以,我們拿目前的 WordPress 3.5.1 和 phploc 1.7.4 跑看看結果如何:
phploc 1.7.4 by Sebastian Bergmann.

Directories:                                         36
Files:                                              426

Lines of Code (LOC):                             190729
  Cyclomatic Complexity / Lines of Code:           0.19
Comment Lines of Code (CLOC):                     61634
Non-Comment Lines of Code (NCLOC):               129095

Namespaces:                                           0
Interfaces:                                           1
Traits:                                               0
Classes:                                            216
  Abstract:                                           2 (0.93%)
  Concrete:                                         214 (99.07%)
  Average Class Length (NCLOC):                     269
Methods:                                           2292
  Scope:
    Non-Static:                                    2186 (95.38%)
    Static:                                         106 (4.62%)
  Visibility:
    Public:                                        2151 (93.85%)
    Non-Public:                                     141 (6.15%)
  Average Method Length (NCLOC):                     25
  Cyclomatic Complexity / Number of Methods:       5.57

Anonymous Functions:                                  0
Functions:                                         2515

Constants:                                          363
  Global constants:                                 358
  Class constants:                                    5
其實結果沒差多少@@


phpcpd
https://github.com/sebastianbergmann/phpcpd
PHP Copy/Paste Detector

再拿 WordPress 3.5.1 跑
phpcpd 1.4.0 by Sebastian Bergmann.

Found 71 exact clones with 1130 duplicated lines in 68 files:

- wp-content/themes/twentytwelve/image.php:101-107
wp-content/themes/twentytwelve/page-templates/full-width.php:25-31

- wp-content/themes/twentytwelve/content-link.php:18-26
wp-content/themes/twentytwelve/content-image.php:19-27

- wp-content/themes/twentytwelve/archive.php:57-64
wp-content/themes/twentytwelve/search.php:43-50

- wp-content/themes/twentytwelve/content-link.php:19-25
wp-content/themes/twentytwelve/content-status.php:25-31

- wp-content/themes/twentytwelve/content-link.php:14-26
wp-content/themes/twentytwelve/content-aside.php:15-27

- wp-content/themes/twentytwelve/content-link.php:14-25
wp-content/themes/twentytwelve/content-quote.php:13-24

- wp-content/themes/twentytwelve/archive.php:36-54
wp-content/themes/twentytwelve/author.php:57-75

- wp-content/themes/twentytwelve/archive.php:36-63
wp-content/themes/twentytwelve/tag.php:25-52

- wp-content/themes/twentytwelve/page.php:22-31
wp-content/themes/twentytwelve/single.php:25-34

- wp-content/themes/twentytwelve/archive.php:57-64
wp-content/themes/twentytwelve/index.php:60-67

- wp-content/themes/twentytwelve/archive.php:36-63
wp-content/themes/twentytwelve/category.php:25-52

- wp-content/themes/twentytwelve/image.php:99-107
wp-content/themes/twentyeleven/image.php:97-105

- wp-content/themes/twentytwelve/page-templates/full-width.php:17-34
wp-content/themes/twentyeleven/page.php:15-32

- wp-content/themes/twentytwelve/search.php:39-50
wp-content/themes/twentyeleven/archive.php:62-73

- wp-content/themes/twentytwelve/page.php:15-33
wp-content/themes/twentyeleven/sidebar-page.php:11-29

- wp-content/themes/twentyeleven/content-link.php:40-48
wp-content/themes/twentyeleven/content-image.php:63-71

- wp-content/themes/twentyeleven/archive.php:61-73
wp-content/themes/twentyeleven/search.php:46-58

- wp-content/themes/twentyeleven/content-link.php:33-47
wp-content/themes/twentyeleven/content-status.php:34-48

- wp-content/themes/twentyeleven/content-link.php:17-47
wp-content/themes/twentyeleven/content-aside.php:17-47

- wp-content/themes/twentyeleven/content-intro.php:13-24
wp-content/themes/twentyeleven/content-page.php:13-24

- wp-content/themes/twentyeleven/content-link.php:42-48
wp-content/themes/twentyeleven/content-quote.php:69-75

- wp-content/themes/twentyeleven/content-quote.php:63-75
wp-content/themes/twentyeleven/content.php:73-85

- wp-content/themes/twentyeleven/archive.php:39-73
wp-content/themes/twentyeleven/author.php:56-90

- wp-content/themes/twentyeleven/archive.php:36-73
wp-content/themes/twentyeleven/tag.php:29-66

- wp-content/themes/twentytwelve/footer.php:17-23
wp-content/themes/twentyeleven/footer.php:27-33

- wp-content/themes/twentytwelve/page-templates/full-width.php:24-32
wp-content/themes/twentyeleven/single.php:25-33

- wp-content/themes/twentyeleven/archive.php:36-67
wp-content/themes/twentyeleven/index.php:22-53

- wp-content/themes/twentyeleven/tag.php:25-66
wp-content/themes/twentyeleven/category.php:25-66

- wp-content/themes/twentyeleven/content-quote.php:36-75
wp-content/themes/twentyeleven/content-gallery.php:54-93

- wp-content/plugins/akismet/legacy.php:234-248
wp-content/plugins/akismet/legacy.php:301-315

- wp-content/plugins/akismet/admin.php:507-521
wp-content/plugins/akismet/admin.php:559-573

- wp-content/themes/twentyeleven/showcase.php:221-231
wp-activate.php:111-121

- wp-includes/SimplePie/Rating.php:107-127
wp-includes/SimplePie/Restriction.php:133-153

- wp-includes/SimplePie/Parse/Date.php:710-722
wp-includes/SimplePie/Misc.php:1769-1781

- wp-includes/SimplePie/Source.php:309-319
wp-includes/SimplePie/Item.php:546-556

- wp-includes/SimplePie/Source.php:331-343
wp-includes/SimplePie/Item.php:568-580

- wp-includes/SimplePie/Source.php:226-236
wp-includes/SimplePie/Item.php:612-622

- wp-includes/SimplePie/Source.php:248-258
wp-includes/SimplePie/Item.php:634-644

- wp-includes/SimplePie/Source.php:423-436
wp-includes/SimplePie/Item.php:1013-1026

- wp-includes/SimplePie/Item.php:1111-1125
wp-includes/SimplePie/Item.php:1143-1157

- wp-includes/SimplePie/Item.php:1113-1121
wp-includes/SimplePie/Item.php:1832-1840

- wp-includes/SimplePie/Item.php:1832-1846
wp-includes/SimplePie/Item.php:1868-1882

- wp-includes/SimplePie/Item.php:1743-1806
wp-includes/SimplePie/Item.php:2365-2428

- wp-includes/SimplePie/Item.php:1825-1875
wp-includes/SimplePie/Item.php:2449-2499

- wp-includes/SimplePie/Item.php:1936-1946
wp-includes/SimplePie/Item.php:2498-2508

- wp-includes/SimplePie/Item.php:1998-2018
wp-includes/SimplePie/Item.php:2550-2570

- wp-includes/SimplePie/Item.php:2115-2126
wp-includes/SimplePie/Item.php:2608-2619

- wp-includes/SimplePie/Item.php:2223-2266
wp-includes/SimplePie/Item.php:2671-2714

- wp-includes/SimplePie/Item.php:2763-2784
wp-includes/SimplePie/Item.php:2798-2819

- wp-includes/SimplePie/Source.php:226-236
wp-includes/class-simplepie.php:2189-2199

- wp-includes/SimplePie/Source.php:248-260
wp-includes/class-simplepie.php:2211-2223

- wp-includes/SimplePie/Source.php:309-319
wp-includes/class-simplepie.php:2287-2297

- wp-includes/SimplePie/Source.php:331-351
wp-includes/class-simplepie.php:2309-2329

- wp-includes/SimplePie/Source.php:421-435
wp-includes/class-simplepie.php:2424-2438

- wp-includes/class-snoopy.php:165-172
wp-includes/class-snoopy.php:225-232

- wp-includes/class-snoopy.php:181-187
wp-includes/class-snoopy.php:339-345

- wp-includes/class-snoopy.php:317-331
wp-includes/class-snoopy.php:384-398

- wp-admin/network/site-settings.php:11-25
wp-admin/network/site-info.php:11-25

- wp-admin/network/site-settings.php:77-96
wp-admin/network/site-info.php:87-106

- wp-admin/network/site-settings.php:154-160
wp-admin/network/site-info.php:175-181

- wp-admin/network/site-settings.php:77-93
wp-admin/network/site-themes.php:128-144

- wp-admin/network/themes.php:267-273
wp-admin/network/site-themes.php:177-183

- wp-admin/network/users.php:295-301
wp-admin/network/sites.php:252-258

- wp-admin/options-writing.php:179-186
wp-admin/options-media.php:131-138

- wp-admin/load-scripts.php:147-163
wp-admin/load-styles.php:136-152

- wp-admin/network/themes.php:264-274
wp-admin/plugins.php:428-438

- wp-admin/includes/update-core.php:798-816
wp-admin/includes/file.php:737-755

- wp-admin/includes/class-wp-filesystem-ftpext.php:171-178
wp-admin/includes/class-wp-filesystem-ftpsockets.php:177-184

- wp-admin/includes/class-wp-filesystem-ssh2.php:349-385
wp-admin/includes/class-wp-filesystem-direct.php:326-362

- wp-admin/options-writing.php:179-185
wp-admin/options-general.php:322-328

- wp-admin/theme-editor.php:243-253
wp-admin/user-edit.php:424-434

0.59% duplicated lines out of 190729 total lines of code.

Time: 6 seconds, Memory: 147.25Mb



phpmd
http://phpmd.org/
PHP Mess Detector

phpmd [filename|directory] [report format] [ruleset file]

report format 有3種:xml, text, html
ruleset 則要參考網站 http://phpmd.org/rules/index.html

  • "unusedcode" rules 還不錯,簡單易懂XD,就是類似 C compile warning 的 unused variable/parameter。
  • "design" rules 目前跑出來的結果,是被抓 function 裡面有 goto exit
  • "controversial" rules 幾乎都是「variable not named in camelCase」和「accesses the super-global variable」,不過這 super-global 的解釋,頗神奇,『Accessing a super-global variable directly is considered a bad practice. These variables should be encapsulated in objects that are provided by a framework』,所謂的"encapsulated in objects",把 $_SERVER, $_POST 包成 object,那包的地方,就不能跑這個 analysis 囉?

這3個tool只是本章一部分,其他下回再戰…

SpaceSniffer 磁碟空間分析工具

SpaceSniffer
http://www.uderzo.it/main_products/space_sniffer/

又一套 disk scanning utility,不過的確蠻好用的。

和一般常見的百分比以及圓餅圖,SpaceSniffer 採用了另外一種顯示方式,佔的容量多,就用較大的區塊顯示,點一下區塊,則再顯示內部的資料夾結構。

和之前使用過的工具比起來,目前覺得最棒的一點就是,檔案刪掉之後,不需要重新 scan,就會反應在顯示結果!每次會開這種工具起來,都是因為硬碟某槽快滿了,所以開起來的下一件事就是要刪檔案,刪完還要重掃,遇到切比較大的,例如1T啊…重掃又不知道幾分鐘過去了

SpaceSniffer 不需要安裝,直接點兩下執行檔就是開啟程式,要注意的是,如果要掃系統檔案,需要用系統管理員權限開啟,不然會彈error寫存取被拒。


2013年3月9日 星期六

VLC 2.0 branch cannot build with libdvbpsi 1.0

其實現在 vlc git master 拉下來的一樣 build 不過啊…

原因很簡單,因為 libdvbpsi 1.0.0 的 API 改名字了啊
libdvbpsi version 1.0.0 breaks API compatibility with earlier versions. 
以上節錄自 libdvbpsi documentation (http://www.videolan.org/developers/libdvbpsi/doc/doxygen/html/)

以下則是 build 失敗的錯誤訊息

dtv/en50221.c: In function 'en50221_SetCAPMT':
dtv/en50221.c:2234: error: implicit declaration of function 'dvbpsi_DeletePMT'
make[5]: *** [libdtv_plugin_la-en50221.lo] Error 1

dvbpsi_DeletePMT() 在 1.0.0 改成了 dvbpsi_pmt_delete(),其他還有很多都是 API rename,可以參考這個 commit

想說 build 不過這麼基本的東西,應該網路上隨便搜尋一下,就會有答案吧,結果看到這篇…

VLC 2.0.x and DVB-T (ISDB-Tb) closes randomly (http://forum.videolan.org/viewtopic.php?f=13&t=103335)

一開始是別的問題,在回報給 libdvbpsi 開發團隊後,答案是 libdvbpsi8 修掉了這個問題,於是就 build vlc with libdvbpsi8 ,然後就 build 不過嘛…,可是很好笑的看到 vlc 開發人員一直跳針地叫人家更新 libdvbpsi 版本、要用 git 版本…,顯然他們自己沒有用新版 libdvbpsi build 過啊…

2013年3月7日 星期四

PHP Master: chapter 2 Databases

開頭主要是在講 PDO 的用法。
try {
$db_conn = new PDO(
'mysql:host=localhost;dbname=recipes',
'php-user',
'secret'
);
} catch (PDOException $e) {
echo "Could not connect to database";
}

有了 PDO object 之後,對 db 操作可以用 query() 去問
$stmt = $pdo->query('SELECT path, title FROM video;');

foreach ($stmt as $row) {
echo "$row[title] is from $row[path]";
}

接著介紹用 prepare()
$stmt = $pdo->prepare(
"SELECT title, path FROM video WHERE title LIKE :title"
);
$stmt->execute(array('title' => "_ondon%"));

execute() 執行完,可以用 rowCount() 來取得受到影響的數量

要用 Transaction 的話,在任何statement執行前下 PDO::beginTransaction() ,結束後再下 PDO::commit()

後面提到了db design,
Primary Keys and Indexes
EXPLAIN command
Foreign Keys
Inner Joins
Outer Joins
Aggregate Functions (COUNT, MAX, MIN, SUM, AVG)
Group by

2013年3月2日 星期六

台灣淳久堂 2013年03月換算基準

http://www.junkudo.tw/info/2013nian3yuehuansuanjizhun


2013年3月份的匯率換算為0.421、雑誌0.389。

由2013年3月1日開始適用新換算基準。

書籍雜誌的區分以台灣為準。

==
日幣貶值,換算匯率也開始下降,前陣子真是貴的嚇人…

2013-02: 0.439、雑誌0.406
2013-01: 0.459、雑誌0.424
2012-12: 0.471、雑誌0.434
2012-11: 0.480、雑誌0.443
2012-10: 0.482、雑誌0.445


坂本真綾「シンガーソングライター」特設サイト

坂本真綾「シンガーソングライター」特設サイト
http://www.jvcmusic.co.jp/maaya/ssw/

發售日期:
2013年3月27日



1. 遠く
2. サンシャイン
3. everywhere~HAL mix
4. ニコラ
5. Ask.
6. なりたい
7. カミナリ
8. 誓い~ssw edition
9. 僕の半分
10. シンガーソングライター





另外,跨年演唱會的BD、DVD,也將在2013年6月12日發售
「坂本真綾 COUNTDOWN LIVE 2012→2013 ~TOUR“ミツバチ”FINAL~」

2013年6月12日発売
Blu-ray \7,140(tax in)
DVD  \6,090(tax in)
*全27曲収録
*初回生産分のみスペシャルパッケージ仕様(予定)
*5.1ch&2ch収録!

<SET LIST>
01. トライアングラー
02. DOWN TOWN
03. スピカ
04. MC1
05. 雨が降る
06. おかえりなさい
07. モアザンワーズ
08. プラリネ
09. MC2
08. 君に会いに行こう
09. パイロット
10. さいごの果実
11. バイク
12. Buddy
13. MC3
14. やさしさに包まれたなら
15. ミツバチと科学者
16. シマシマ
17. MC4
18. action!
19. Private Sky
20. Get No Satisfaction!
21. マジックナンバー~COUNTDOWN edition
22. eternal return
23. MC5
24. 風待ちジェット~mitsubachi edition
25. 猫背
26. MC6
27. ループ
28. ポケットを空にして

<アンコール>
29. A HAPPY NEW YEAR
30. MC6
31. 約束はいらない
32. MC7
33. デコボコマーチ(隊列は君に続く)